text:
function adjustHeight(obj, offset) {
	var helpFrame = jQuery("#" + obj.name);
	var innerDoc = (helpFrame.get(0).contentDocument) ? helpFrame.get(0).contentDocument : helpFrame.get(0).contentWindow.document;
	helpFrame.height(innerDoc.body.scrollHeight + offset);
}
;
(function ($) {

/**
 * Attaches double-click behavior to toggle full path of Krumo elements.
 */
Drupal.behaviors.devel = {
  attach: function (context, settings) {

    // Add hint to footnote
    $('.krumo-footnote .krumo-call').before('');

    var krumo_name = [];
    var krumo_type = [];

    function krumo_traverse(el) {
      krumo_name.push($(el).html());
      krumo_type.push($(el).siblings('em').html().match(/\w*/)[0]);

      if ($(el).closest('.krumo-nest').length > 0) {
        krumo_traverse($(el).closest('.krumo-nest').prev().find('.krumo-name'));
      }
    }

    $('.krumo-child > div:first-child', context).dblclick(
      function(e) {
        if ($(this).find('> .krumo-php-path').length > 0) {
          // Remove path if shown.
          $(this).find('> .krumo-php-path').remove();
        }
        else {
          // Get elements.
          krumo_traverse($(this).find('> a.krumo-name'));

          // Create path.
          var krumo_path_string = '';
          for (var i = krumo_name.length - 1; i >= 0; --i) {
            // Start element.
            if ((krumo_name.length - 1) == i)
              krumo_path_string += '$' + krumo_name[i];

            if (typeof krumo_name[(i-1)] !== 'undefined') {
              if (krumo_type[i] == 'Array') {
                krumo_path_string += "[";
                if (!/^\d*$/.test(krumo_name[(i-1)]))
                  krumo_path_string += "'";
                krumo_path_string += krumo_name[(i-1)];
                if (!/^\d*$/.test(krumo_name[(i-1)]))
                  krumo_path_string += "'";
                krumo_path_string += "]";
              }
              if (krumo_type[i] == 'Object')
                krumo_path_string += '->' + krumo_name[(i-1)];
            }
          }
          $(this).append('
' + krumo_path_string + '
');

          // Reset arrays.
          krumo_name = [];
          krumo_type = [];
        }
      }
    );
  }
};

})(jQuery);
;
(function($){
Drupal.behaviors.contextReactionBlock = {attach: function(context) {
  $('form.context-editor:not(.context-block-processed)')
    .addClass('context-block-processed')
    .each(function() {
      var id = $(this).attr('id');
      Drupal.contextBlockEditor = Drupal.contextBlockEditor || {};
      $(this).bind('init.pageEditor', function(event) {
        Drupal.contextBlockEditor[id] = new DrupalContextBlockEditor($(this));
      });
      $(this).bind('start.pageEditor', function(event, context) {
        // Fallback to first context if param is empty.
        if (!context) {
          context = $(this).data('defaultContext');
        }
        Drupal.contextBlockEditor[id].editStart($(this), context);
      });
      $(this).bind('end.pageEditor', function(event) {
        Drupal.contextBlockEditor[id].editFinish();
      });
    });

  //
  // Admin Form =======================================================
  //
  // ContextBlockForm: Init.
  $('#context-blockform:not(.processed)').each(function() {
    $(this).addClass('processed');
    Drupal.contextBlockForm = new DrupalContextBlockForm($(this));
    Drupal.contextBlockForm.setState();
  });

  // ContextBlockForm: Attach block removal handlers.
  // Lives in behaviors as it may be required for attachment to new DOM elements.
  $('#context-blockform a.remove:not(.processed)').each(function() {
    $(this).addClass('processed');
    $(this).click(function() {
      $(this).parents('tr').eq(0).remove();
      Drupal.contextBlockForm.setState();
      return false;
    });
  });

  // Conceal Section title, subtitle and class
  $('div.context-block-browser', context).nextAll('.form-item').hide();
}};

/**
 * Context block form. Default form for editing context block reactions.
 */
DrupalContextBlockForm = function(blockForm) {
  this.state = {};

  this.setState = function() {
    $('table.context-blockform-region', blockForm).each(function() {
      var region = $(this).attr('id').split('context-blockform-region-')[1];
      var blocks = [];
      $('tr', $(this)).each(function() {
        var bid = $(this).attr('id');
        var weight = $(this).find('select,input').first().val();
        blocks.push({'bid' : bid, 'weight' : weight});
      });
      Drupal.contextBlockForm.state[region] = blocks;
    });

    // Serialize here and set form element value.
    $('form input.context-blockform-state').val(JSON.stringify(this.state));

    // Hide enabled blocks from selector that are used
    $('table.context-blockform-region tr').each(function() {
      var bid = $(this).attr('id');
      $('div.context-blockform-selector input[value='+bid+']').parents('div.form-item').eq(0).hide();
    });
    // Show blocks in selector that are unused
    $('div.context-blockform-selector input').each(function() {
      var bid = $(this).val();
      if ($('table.context-blockform-region tr#'+bid).size() === 0) {
        $(this).parents('div.form-item').eq(0).show();
      }
    });

  };

  // make sure we update the state right before submits, this takes care of an
  // apparent race condition between saving the state and the weights getting set
  // by tabledrag
  $('#ctools-export-ui-edit-item-form').submit(function() { Drupal.contextBlockForm.setState(); });

  // Tabledrag
  // Add additional handlers to update our blocks.
  $.each(Drupal.settings.tableDrag, function(base) {
    var table = $('#' + base + ':not(.processed)', blockForm);
    if (table && table.is('.context-blockform-region')) {
      table.addClass('processed');
      table.bind('mouseup', function(event) {
        Drupal.contextBlockForm.setState();
        return;
      });
    }
  });

  // Add blocks to a region
  $('td.blocks a', blockForm).each(function() {
    $(this).click(function() {
      var region = $(this).attr('href').split('#')[1];
      var base = "context-blockform-region-"+ region;
      var selected = $("div.context-blockform-selector input:checked");
      if (selected.size() > 0) {
        var weight_warn = false;
        var min_weight_option = -10;
        var max_weight_option = 10;
        var max_observed_weight = min_weight_option - 1;
        $('table#' + base + ' tr').each(function() {
          var weight_input_val = $(this).find('select,input').first().val();
          if (+weight_input_val > +max_observed_weight) {
            max_observed_weight = weight_input_val;
          }
        });

        selected.each(function() {
          // create new block markup
          var block = document.createElement('tr');
          var text = $(this).parents('div.form-item').eq(0).hide().children('label').text();
          var select = '
<select class="tabledrag-hide form-select">';
          var i;
          weight_warn = true;
          var selected_weight = max_weight_option;
          if (max_weight_option >= (1 + +max_observed_weight)) {
            selected_weight = ++max_observed_weight;
            weight_warn = false;
          }

          for (i = min_weight_option; i <= max_weight_option; ++i) {
            select += '<option';
            if (i == selected_weight) {
              select += ' selected=selected';
            }
            select += '>' + i + '</option>';
          }
          select += '</select>
';
          $(block).attr('id', $(this).attr('value')).addClass('draggable');
          $(block).html(""+ text + "	" + select + "	X	");

          // add block item to region
          //TODO : Fix it so long blocks don't get stuck when added to top regions and dragged towards bottom regions
          Drupal.tableDrag[base].makeDraggable(block);
          $('table#'+base).append(block);
          if ($.cookie('Drupal.tableDrag.showWeight') == 1) {
            $('table#'+base).find('.tabledrag-hide').css('display', '');
            $('table#'+base).find('.tabledrag-handle').css('display', 'none');
          }
          else {
            $('table#'+base).find('.tabledrag-hide').css('display', 'none');
            $('table#'+base).find('.tabledrag-handle').css('display', '');
          }
          Drupal.attachBehaviors($('table#'+base));

          Drupal.contextBlockForm.setState();
          $(this).removeAttr('checked');
        });
        if (weight_warn) {
          alert(Drupal.t('Desired block weight exceeds available weight options, please check weights for blocks before saving'));
        }
      }
      return false;
    });
  });
};

/**
 * Context block editor. AHAH editor for live block reaction editing.
 */
DrupalContextBlockEditor = function(editor) {
  this.editor = editor;
  this.state = {};
  this.blocks = {};
  this.regions = {};

  return this;
};

DrupalContextBlockEditor.prototype = {
  initBlocks : function(blocks) {
    var self = this;
    this.blocks = blocks;
    blocks.each(function() {
      if($(this).hasClass('context-block-empty')) {
        $(this).removeClass('context-block-hidden');
      }
      $(this).addClass('draggable');
      $(this).prepend($(''));
      $(this).prepend($('').click(function() {
        $(this).parent ('.block').eq(0).fadeOut('medium', function() {
          $(this).remove();
          self.updateBlocks();
        });
        return false;
      }));
    });
  },
  initRegions : function(regions) {
    this.regions = regions;
    var ref = this;

    $(regions).not('.context-ui-processed')
      .each(function(index, el) {
        $('.context-ui-add-link', el).click(function(e){
          ref.showBlockBrowser($(this).parent());
        }).addClass('context-ui-processed');
      });
    $('.context-block-browser').hide();
  },
  showBlockBrowser : function(region) {
    var toggled = false;
    //figure out the id of the context
    var activeId = $('.context-editing', this.editor).attr('id').replace('-trigger', ''),
    context = $('#' + activeId)[0];

    this.browser = $('.context-block-browser', context).addClass('active');

    //add the filter element to the block browser
    if (!this.browser.has('input.filter').size()) {
      var parent = $('.block-browser-sidebar .filter', this.browser);
      var list = $('.blocks', this.browser);
      new Drupal.Filter (list, false, '.context-block-addable', parent);
    }
    //show a dialog for the blocks list
    this.browser.show().dialog({
      modal : true,
      close : function() {
        $(this).dialog('destroy');
        //reshow all the categories
        $('.category', this).show();
        $(this).hide().appendTo(context).removeClass('active');
      },
      height: (.8 * $(window).height()),
      minHeight:400,
      minWidth:680,
      width:680
    });

    //handle showing / hiding block items when a different category is selected
    $('.context-block-browser-categories', this.browser).change(function(e) {
      //if no category is selected we want to show all the items
      if ($(this).val() == 0) {
        $('.category', self.browser).show();
      } else {
        $('.category', self.browser).hide();
        $('.category-' + $(this).val(), self.browser).show();
      }
    });

    //if we already have the function for a different context, rebind it so we don't get dupes
    if(this.addToRegion) {
      $('.context-block-addable', this.browser).unbind('click.addToRegion')
    }

    //protected function for adding a clicked block to a region
    var self = this;
    this.addToRegion = function(e){
      var ui = {
        'item' : $(this).clone(),
        'sender' : $(region)
      };
      $(this).parents('.context-block-browser.active').dialog('close');
      $(region).after(ui.item);
      self.addBlock(e, ui, this.editor, activeId.replace('context-editable-', ''));
    };

    $('.context-block-addable', this.browser).bind('click.addToRegion', this.addToRegion);
  },
  // Update UI to match the current block states.
  updateBlocks : function() {
    var browser = $('div.context-block-browser');

    // For all enabled blocks, mark corresponding addables as having been added.
    $('.block, .admin-block').each(function() {
      var bid = $(this).attr('id').split('block-')[1]; // Ugh.
    });
    // For all hidden addables with no corresponding blocks, mark as addable.
    $('.context-block-item', browser).each(function() {
      var bid = $(this).attr('id').split('context-block-addable-')[1];
    });

    // Mark empty regions.
    $(this.regions).each(function() {
      if ($('.block:has(a.context-block)', this).size() > 0) {
        $(this).removeClass('context-block-region-empty');
      }
      else {
        $(this).addClass('context-block-region-empty');
      }
    });
  },
  // Live update a region
  updateRegion : function(event, ui, region, op) {
    switch (op) {
      case 'over':
        $(region).removeClass('context-block-region-empty');
        break;
      case 'out':
        if (
          // jQuery UI 1.8
          $('.draggable-placeholder', region).size() === 1 &&
          $('.block:has(a.context-block)', region).size() == 0
        ) {
          $(region).addClass('context-block-region-empty');
        }
        break;
    }
  },
  // Remove script elements while dragging & dropping.
  scriptFix : function(event, ui, editor, context) {
    if ($('script', ui.item)) {
      var placeholder = $(Drupal.settings.contextBlockEditor.scriptPlaceholder);
      var label = $('div.handle label', ui.item).text();
      placeholder.children('strong').html(label);
      $('script', ui.item).parent().empty().append(placeholder);
    }
  },
  // Add a block to a region through an AJAX load of the block contents.
  addBlock : function(event, ui, editor, context) {
    var self = this;
    if (ui.item.is('.context-block-addable')) {
      var bid = ui.item.attr('id').split('context-block-addable-')[1];

      // Construct query params for our AJAX block request.
      var params = Drupal.settings.contextBlockEditor.params;
      params.context_block = bid + ',' + context;
      if (!Drupal.settings.contextBlockEditor.block_tokens || !Drupal.settings.contextBlockEditor.block_tokens[bid]) {
        alert(Drupal.t('An error occurred trying to retrieve block content. Please contact a site administer.'));
        return;
     }
     params.context_token = Drupal.settings.contextBlockEditor.block_tokens[bid];

      // Replace item with loading block.
      //ui.sender.append(ui.item);

      var blockLoading = $('

');
      ui.item.addClass('context-block-added');
      ui.item.after(blockLoading);

      $.getJSON(Drupal.settings.contextBlockEditor.path, params, function(data) {
        if (data.status) {
          var newBlock = $(data.block);
          if ($('script', newBlock)) {
            $('script', newBlock).remove();
          }
          blockLoading.fadeOut(function() {
            $(this).replaceWith(newBlock);
            self.initBlocks(newBlock);
            self.updateBlocks();
            Drupal.attachBehaviors(newBlock);
          });
        }
        else {
          blockLoading.fadeOut(function() { $(this).remove(); });
        }
      });
    }
    else if (ui.item.is(':has(a.context-block)')) {
      self.updateBlocks();
    }
  },
  // Update form hidden field with JSON representation of current block visibility states.
  setState : function() {
    var self = this;

    $(this.regions).each(function() {
      var region = $('.context-block-region', this).attr('id').split('context-block-region-')[1];
      var blocks = [];
      $('a.context-block', $(this)).each(function() {
        if ($(this).attr('class').indexOf('edit-') != -1) {
          var bid = $(this).attr('id').split('context-block-')[1];
          var context = $(this).attr('class').split('edit-')[1].split(' ')[0];
          context = context ? context : 0;
          var block = {'bid': bid, 'context': context};
          blocks.push(block);
        }
      });
      self.state[region] = blocks;
    });
    // Serialize here and set form element value.
    $('input.context-block-editor-state', this.editor).val(JSON.stringify(this.state));
  },
  //Disable text selection.
  disableTextSelect : function() {
    if ($.browser.safari) {
      $('.block:has(a.context-block):not(:has(input,textarea))').css('WebkitUserSelect','none');
    }
    else if ($.browser.mozilla) {
      $('.block:has(a.context-block):not(:has(input,textarea))').css('MozUserSelect','none');
    }
    else if ($.browser.msie) {
      $('.block:has(a.context-block):not(:has(input,textarea))').bind('selectstart.contextBlockEditor', function() { return false; });
    }
    else {
      $(this).bind('mousedown.contextBlockEditor', function() { return false; });
    }
  },
  //Enable text selection.
  enableTextSelect : function() {
    if ($.browser.safari) {
      $('*').css('WebkitUserSelect','');
    }
    else if ($.browser.mozilla) {
      $('*').css('MozUserSelect','');
    }
    else if ($.browser.msie) {
      $('*').unbind('selectstart.contextBlockEditor');
    }
    else {
      $(this).unbind('mousedown.contextBlockEditor');
    }
  },
  // Start editing. Attach handlers, begin draggable/sortables.
  editStart : function(editor, context) {
    var self = this;
    // This is redundant to the start handler found in context_ui.js.
    // However it's necessary that we trigger this class addition before
    // we call .sortable() as the empty regions need to be visible.
    $(document.body).addClass('context-editing');
    this.editor.addClass('context-editing');
    this.disableTextSelect();
    this.initBlocks($('.block:has(a.context-block.edit-'+context+')'));
    this.initRegions($('.context-block-region').parent());
    this.updateBlocks();

    $('a.context_ui_dialog-stop').hide();

    $('.editing-context-label').remove();
    var label = $('#context-editable-trigger-'+context+' .label').text();
    label = Drupal.t('Now Editing: ') + label;
    editor.parent().parent()
      .prepend('
'+ label + '
');

    // First pass, enable sortables on all regions.
    $(this.regions).each(function() {
      var region = $(this);
      var params = {
        revert: true,
        dropOnEmpty: true,
        placeholder: 'draggable-placeholder',
        forcePlaceholderSize: true,
        items: '> .block:has(a.context-block.editable)',
        handle: 'a.context-block-handle',
        start: function(event, ui) { self.scriptFix(event, ui, editor, context); },
        stop: function(event, ui) { self.addBlock(event, ui, editor, context); },
        receive: function(event, ui) { self.addBlock(event, ui, editor, context); },
        over: function(event, ui) { self.updateRegion(event, ui, region, 'over'); },
        out: function(event, ui) { self.updateRegion(event, ui, region, 'out'); },
        cursorAt: {left: 300, top: 0}
      };
      region.sortable(params);
    });

    // Second pass, hook up all regions via connectWith to each other.
    $(this.regions).each(function() {
      $(this).sortable('option', 'connectWith', ['.ui-sortable']);
    });

    // Terrible, terrible workaround for parentoffset issue in Safari.
    // The proper fix for this issue has been committed to jQuery UI, but was
    // not included in the 1.6 release. Therefore, we do a browser agent hack
    // to ensure that Safari users are covered by the offset fix found here:
    // http://dev.jqueryui.com/changeset/2073.
    if ($.ui.version === '1.6' && $.browser.safari) {
      $.browser.mozilla = true;
    }
  },
  // Finish editing. Remove handlers.
  editFinish : function() {
    this.editor.removeClass('context-editing');
    this.enableTextSelect();

    $('.editing-context-label').remove();

    // Remove UI elements.
    $(this.blocks).each(function() {
      $('a.context-block-handle, a.context-block-remove', this).remove();
      if($(this).hasClass('context-block-empty')) {
        $(this).addClass('context-block-hidden');
      }
      $(this).removeClass('draggable');
    });

    $('a.context_ui_dialog-stop').show();

    this.regions.sortable('destroy');

    this.setState();

    // Unhack the user agent.
    if ($.ui.version === '1.6' && $.browser.safari) {
      $.browser.mozilla = false;
    }
  }
}; //End of DrupalContextBlockEditor prototype

})(jQuery);
;

/**
 * JavaScript behaviors for the front-end display of webforms.
 */

(function ($) {

Drupal.behaviors.webform = Drupal.behaviors.webform || {};

Drupal.behaviors.webform.attach = function(context) {
  // Calendar datepicker behavior.
  Drupal.webform.datepicker(context);
};

Drupal.webform = Drupal.webform || {};

Drupal.webform.datepicker = function(context) {
  $('div.webform-datepicker').each(function() {
    var $webformDatepicker = $(this);
    var $calendar = $webformDatepicker.find('input.webform-calendar');
    var startDate = $calendar[0].className.replace(/.*webform-calendar-start-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
    var endDate = $calendar[0].className.replace(/.*webform-calendar-end-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
    var firstDay = $calendar[0].className.replace(/.*webform-calendar-day-(\d).*/, '$1');
    // Convert date strings into actual Date objects.
    startDate = new Date(startDate[0], startDate[1] - 1, startDate[2]);
    endDate = new Date(endDate[0], endDate[1] - 1, endDate[2]);

    // Ensure that start comes before end for datepicker.
    if (startDate > endDate) {
      var laterDate = startDate;
      startDate = endDate;
      endDate = laterDate;
    }

    var startYear = startDate.getFullYear();
    var endYear = endDate.getFullYear();

    // Set up the jQuery datepicker element.
    $calendar.datepicker({
      dateFormat: 'yy-mm-dd',
      yearRange: startYear + ':' + endYear,
      firstDay: parseInt(firstDay),
      minDate: startDate,
      maxDate: endDate,
      onSelect: function(dateText, inst) {
        var date = dateText.split('-');
        $webformDatepicker.find('select.year, input.year').val(+date[0]);
        $webformDatepicker.find('select.month').val(+date[1]);
        $webformDatepicker.find('select.day').val(+date[2]);
      },
      beforeShow: function(input, inst) {
        // Get the select list values.
        var year = $webformDatepicker.find('select.year, input.year').val();
        var month = $webformDatepicker.find('select.month').val();
        var day = $webformDatepicker.find('select.day').val();

        // If empty, default to the current year/month/day in the popup.
        var today = new Date();
        year = year ? year : today.getFullYear();
        month = month ? month : today.getMonth() + 1;
        day = day ? day : today.getDate();

        // Make sure that the default year fits in the available options.
        year = (year < startYear || year > endYear) ? startYear : year;

        // jQuery UI Datepicker will read the input field and base its date off
        // of that, even though in our case the input field is a button.
        $(input).val(year + '-' + month + '-' + day);
      }
    });

    // Prevent the calendar button from submitting the form.
    $calendar.click(function(event) {
      $(this).focus();
      event.preventDefault();
    });
  });
}

})(jQuery);
;
// jQuery Input Hints plugin
// Copyright (c) Rob Volk
// https://github.com/robvolk/jQuery.InputHints
// http://robvolk.com/jquery-form-input-hints-plugin
(function (n) { n.fn.inputHints = function () { function r(t) { jQuery(t).val() == "" && jQuery(t).val(n(t).attr("placeholder")).addClass("hint") } function i(t) { n(t).val() == n(t).attr("placeholder") && n(t).val("").removeClass("hint") } var t = n(this); return t.each(function () { r(this) }), t.closest("form").submit(function () { return t.each(function () { i(this) }), !0 }), t.focus(function () { i(this) }).blur(function () { r(this) }) } })(jQuery)
;
(function ($) {

$(function() {
    // hook up placeholder text on any input with a placeholder attribute
    $('input[placeholder]').inputHints();
});

// $(function() {
//   // For all petition forms.
//   $('[id|="webform-client-form-27"]').submit(function() {
//     // Check for required fields.
//     if (validate_form(this)) {
//       return true;
//     }
//     else {
//       console.log('All fields are required.');
//       return false;
//     }
//   });
// });
//
// function validate_form(form) {
//   form.$('input[type=text]').each(function() {
//     if (this.val == '') {
//       return false;
//     }
//   });
//   return true;
// }

})(jQuery);
;
(function ($) {

Drupal.behaviors.textarea = {
  attach: function (context, settings) {
    $('.form-textarea-wrapper.resizable', context).once('textarea', function () {
      var staticOffset = null;
      var textarea = $(this).addClass('resizable-textarea').find('textarea');
      var grippie = $('

').mousedown(startDrag);

      grippie.insertAfter(textarea);

      function startDrag(e) {
        staticOffset = textarea.height() - e.pageY;
        textarea.css('opacity', 0.25);
        $(document).mousemove(performDrag).mouseup(endDrag);
        return false;
      }

      function performDrag(e) {
        textarea.height(Math.max(32, staticOffset + e.pageY) + 'px');
        return false;
      }

      function endDrag(e) {
        $(document).unbind('mousemove', performDrag).unbind('mouseup', endDrag);
        textarea.css('opacity', 1);
      }
    });
  }
};

})(jQuery);
;
(function ($) {

/**
 * A progressbar object. Initialized with the given id. Must be inserted into
 * the DOM afterwards through progressBar.element.
 *
 * method is the function which will perform the HTTP request to get the
 * progress bar state. Either "GET" or "POST".
 *
 * e.g. pb = new progressBar('myProgressBar');
 *      some_element.appendChild(pb.element);
 */
Drupal.progressBar = function (id, updateCallback, method, errorCallback) {
  var pb = this;
  this.id = id;
  this.method = method || 'GET';
  this.updateCallback = updateCallback;
  this.errorCallback = errorCallback;

  // The WAI-ARIA setting aria-live="polite" will announce changes after users
  // have completed their current activity and not interrupt the screen reader.
  this.element = $('

').attr('id', id);
  this.element.html('

' +
                    '

' +
                    '

');
};

/**
 * Set the percentage and status message for the progressbar.
 */
Drupal.progressBar.prototype.setProgress = function (percentage, message) {
  if (percentage >= 0 && percentage <= 100) {
    $('div.filled', this.element).css('width', percentage + '%');
    $('div.percentage', this.element).html(percentage + '%');
  }
  $('div.message', this.element).html(message);
  if (this.updateCallback) {
    this.updateCallback(percentage, message, this);
  }
};

/**
 * Start monitoring progress via Ajax.
 */
Drupal.progressBar.prototype.startMonitoring = function (uri, delay) {
  this.delay = delay;
  this.uri = uri;
  this.sendPing();
};

/**
 * Stop monitoring progress via Ajax.
 */
Drupal.progressBar.prototype.stopMonitoring = function () {
  clearTimeout(this.timer);
  // This allows monitoring to be stopped from within the callback.
  this.uri = null;
};

/**
 * Request progress data from server.
 */
Drupal.progressBar.prototype.sendPing = function () {
  if (this.timer) {
    clearTimeout(this.timer);
  }
  if (this.uri) {
    var pb = this;
    // When doing a post request, you need non-null data. Otherwise a
    // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
    $.ajax({
      type: this.method,
      url: this.uri,
      data: '',
      dataType: 'json',
      success: function (progress) {
        // Display errors.
        if (progress.status == 0) {
          pb.displayError(progress.data);
          return;
        }
        // Update display.
        pb.setProgress(progress.percentage, progress.message);
        // Schedule next timer.
        pb.timer = setTimeout(function () { pb.sendPing(); }, pb.delay);
      },
      error: function (xmlhttp) {
        pb.displayError(Drupal.ajaxError(xmlhttp, pb.uri));
      }
    });
  }
};

/**
 * Display errors on the page.
 */
Drupal.progressBar.prototype.displayError = function (string) {
  var error = $('

').html(string);
  $(this.element).before(error).hide();

  if (this.errorCallback) {
    this.errorCallback(this);
  }
};

})(jQuery);
;
/**
 * @file
 * Provides JavaScript additions to the managed file field type.
 *
 * This file provides progress bar support (if available), popup windows for
 * file previews, and disabling of other file fields during Ajax uploads (which
 * prevents separate file fields from accidentally uploading files).
 */

(function ($) {

/**
 * Attach behaviors to managed file element upload fields.
 */
Drupal.behaviors.fileValidateAutoAttach = {
  attach: function (context, settings) {
    if (settings.file && settings.file.elements) {
      $.each(settings.file.elements, function(selector) {
        var extensions = settings.file.elements[selector];
        $(selector, context).bind('change', {extensions: extensions}, Drupal.file.validateExtension);
      });
    }
  },
  detach: function (context, settings) {
    if (settings.file && settings.file.elements) {
      $.each(settings.file.elements, function(selector) {
        $(selector, context).unbind('change', Drupal.file.validateExtension);
      });
    }
  }
};

/**
 * Attach behaviors to the file upload and remove buttons.
 */
Drupal.behaviors.fileButtons = {
  attach: function (context) {
    $('input.form-submit', context).bind('mousedown', Drupal.file.disableFields);
    $('div.form-managed-file input.form-submit', context).bind('mousedown', Drupal.file.progressBar);
  },
  detach: function (context) {
    $('input.form-submit', context).unbind('mousedown', Drupal.file.disableFields);
    $('div.form-managed-file input.form-submit', context).unbind('mousedown', Drupal.file.progressBar);
  }
};

/**
 * Attach behaviors to links within managed file elements.
 */
Drupal.behaviors.filePreviewLinks = {
  attach: function (context) {
    $('div.form-managed-file .file a, .file-widget .file a', context).bind('click',Drupal.file.openInNewWindow);
  },
  detach: function (context){
    $('div.form-managed-file .file a, .file-widget .file a', context).unbind('click', Drupal.file.openInNewWindow);
  }
};

/**
 * File upload utility functions.
 */
Drupal.file = Drupal.file || {
  /**
   * Client-side file input validation of file extensions.
   */
  validateExtension: function (event) {
    // Remove any previous errors.
    $('.file-upload-js-error').remove();

    // Add client side validation for the input[type=file].
    var extensionPattern = event.data.extensions.replace(/,\s*/g, '|');
    if (extensionPattern.length > 1 && this.value.length > 0) {
      var acceptableMatch = new RegExp('\\.(' + extensionPattern + ')$', 'gi');
      if (!acceptableMatch.test(this.value)) {
        var error = Drupal.t("The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.", {
          // According to the specifications of HTML5, a file upload control
          // should not reveal the real local path to the file that a user
          // has selected. Some web browsers implement this restriction by
          // replacing the local path with "C:\fakepath\", which can cause
          // confusion by leaving the user thinking perhaps Drupal could not
          // find the file because it messed up the file path. To avoid this
          // confusion, therefore, we strip out the bogus fakepath string.
          '%filename': this.value.replace('C:\\fakepath\\', ''),
          '%extensions': extensionPattern.replace(/\|/g, ', ')
        });
        $(this).closest('div.form-managed-file').prepend('
' + error + '
');
        this.value = '';
        return false;
      }
    }
  },
  /**
   * Prevent file uploads when using buttons not intended to upload.
   */
  disableFields: function (event){
    var clickedButton = this;

    // Only disable upload fields for Ajax buttons.
    if (!$(clickedButton).hasClass('ajax-processed')) {
      return;
    }

    // Check if we're working with an "Upload" button.
    var $enabledFields = [];
    if ($(this).closest('div.form-managed-file').length > 0) {
      $enabledFields = $(this).closest('div.form-managed-file').find('input.form-file');
    }

    // Temporarily disable upload fields other than the one we're currently
    // working with. Filter out fields that are already disabled so that they
    // do not get enabled when we re-enable these fields at the end of behavior
    // processing. Re-enable in a setTimeout set to a relatively short amount
    // of time (1 second). All the other mousedown handlers (like Drupal's Ajax
    // behaviors) are excuted before any timeout functions are called, so we
    // don't have to worry about the fields being re-enabled too soon.
    // @todo If the previous sentence is true, why not set the timeout to 0?
    var $fieldsToTemporarilyDisable = $('div.form-managed-file input.form-file').not($enabledFields).not(':disabled');
    $fieldsToTemporarilyDisable.attr('disabled', 'disabled');
    setTimeout(function (){
      $fieldsToTemporarilyDisable.attr('disabled', false);
    }, 1000);
  },
  /**
   * Add progress bar support if possible.
   */
  progressBar: function (event) {
    var clickedButton = this;
    var $progressId = $(clickedButton).closest('div.form-managed-file').find('input.file-progress');
    if ($progressId.length) {
      var originalName = $progressId.attr('name');

      // Replace the name with the required identifier.
      $progressId.attr('name', originalName.match(/APC_UPLOAD_PROGRESS|UPLOAD_IDENTIFIER/)[0]);

      // Restore the original name after the upload begins.
      setTimeout(function () {
        $progressId.attr('name', originalName);
      }, 1000);
    }
    // Show the progress bar if the upload takes longer than half a second.
    setTimeout(function () {
      $(clickedButton).closest('div.form-managed-file').find('div.ajax-progress-bar').slideDown();
    }, 500);
  },
  /**
   * Open links to files within forms in a new window.
   */
  openInNewWindow: function (event) {
    $(this).attr('target', '_blank');
    window.open(this.href, 'filePreview', 'toolbar=0,scrollbars=1,location=1,statusbar=1,menubar=0,resizable=1,width=500,height=550');
    return false;
  }
};

})(jQuery);
;
(function ($) {

/**
 * Behavior to add source options to configured fields.
 */
Drupal.behaviors.fileFieldSources = {};
Drupal.behaviors.fileFieldSources.attach = function(context, settings) {
  $('div.filefield-sources-list:not(.filefield-sources-processed)', context).each(function() {
    $(this).addClass('filefield-sources-processed');
    var $fileFieldElement = $(this).parents('div.form-managed-file:first');
    $(this).find('a').click(function() {
      // Remove the active class.
      $(this).parents('div.filefield-sources-list').find('a.active').removeClass('active');

      // Find the unique FileField Source class name.
      var fileFieldSourceClass = this.className.match(/filefield-source-[0-9a-z]+/i)[0];

      // The default upload element is a special case.
      if ($(this).is('.filefield-source-upload')) {
        $fileFieldElement.find('div.filefield-sources-list').siblings('input.form-file, input.form-submit').css('display', '');
        $fileFieldElement.find('div.filefield-source').css('display', 'none');
      }
      else {
        $fileFieldElement.find('div.filefield-sources-list').siblings('input.form-file, input.form-submit').css('display', 'none');
        $fileFieldElement.find('div.filefield-source').not('div.' + fileFieldSourceClass).css('display', 'none');
        $fileFieldElement.find('div.' + fileFieldSourceClass).css('display', '');
      }

      // Add the active class.
      $(this).addClass('active');
      Drupal.fileFieldSources.updateHintText($fileFieldElement.get(0));
    });

    // Clipboard support.
    $fileFieldElement.find('.filefield-source-clipboard-capture')
      .bind('paste', Drupal.fileFieldSources.pasteEvent)
      .bind('focus', Drupal.fileFieldSources.pasteFocus)
      .bind('blur', Drupal.fileFieldSources.pasteBlur);

    // Hide all the other upload mechanisms on page load.
    $fileFieldElement.find('div.filefield-source', this).css('display', 'none');
    $(this).find('a:first').addClass('active');
  });

  if (context === document) {
    $('form').submit(function() {
      Drupal.fileFieldSources.removeHintText();
    });
  }
};

/**
 * Helper functions used by FileField Sources.
 */
Drupal.fileFieldSources = {
  /**
   * Update the hint text when clicking between source types.
   */
  updateHintText: function(fileFieldElement) {
    // Add default value hint text to text fields.
    $(fileFieldElement).find('div.filefield-source').each(function() {
      var matches = this.className.match(/filefield-source-([a-z]+)/);
      var sourceType = matches[1];
      var defaultText = '';
      var textfield = $(this).find('input.form-text:first').get(0);
      var defaultText = (Drupal.settings.fileFieldSources && Drupal.settings.fileFieldSources[sourceType]) ? Drupal.settings.fileFieldSources[sourceType].hintText : '';

      // If the field doesn't exist, just return.
      if (!textfield) {
        return;
      }

      // If this field is not shown, remove its value and be done.
      if (!$(this).is(':visible') && textfield.value == defaultText) {
        textfield.value = '';
        return;
      }

      // Set a default value:
      if (textfield.value == '') {
        textfield.value = defaultText;
      }

      // Set a default class.
      if (textfield.value == defaultText) {
        $(textfield).addClass('hint');
      }

      $(textfield).focus(hideHintText);
      $(textfield).blur(showHintText);

      function showHintText() {
        if (this.value == '') {
          this.value = defaultText;
          $(this).addClass('hint');
        }
      }

      function hideHintText() {
        if (this.value == defaultText) {
          this.value = '';
          $(this).removeClass('hint');
        }
      }
    });
  },

  /**
   * Delete all hint text from a form before submit.
   */
  removeHintText: function() {
    $('div.filefield-source input.hint').val('').removeClass('hint');
  },

  /**
   * Clean up the default value on focus.
   */
  pasteFocus: function(e) {
    // Set default text.
    if (!this.defaultText) {
      this.defaultText = this.innerHTML;
      this.innerHTML = '';
    }
    // Remove non-text nodes.
    $(this).children().remove();
  },

  /**
   * Restore default value on blur.
   */
  pasteBlur: function(e) {
    if (this.defaultText && !this.innerHTML) {
      this.innerHTML = this.defaultText;
    }
  },

  pasteEvent: function(e) {
    var clipboardData = null;
    var targetElement = this;

    // Chrome.
    if (window.event && window.event.clipboardData && window.event.clipboardData.items) {
      clipboardData = window.event.clipboardData;
    }
    // All browsers in the future (hopefully).
    else if (e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.items) {
      clipboardData = e.originalEvent.clipboardData;
    }
    // Firefox with content editable pastes as img tag with data href.
    else if ($.browser.mozilla) {
      Drupal.fileFieldSources.waitForPaste(targetElement);
      return true;
    }
    else {
      Drupal.fileFieldSources.pasteError(targetElement, Drupal.t('Paste from clipboard not supported in this browser.'));
      return false;
    }

    var items = clipboardData.items;
    var types = clipboardData.types;
    var filename = targetElement.firstChild ? targetElement.firstChild.textContent : '';

    // Handle files and image content directly in the clipboard.
    var fileFound = false;
    for (var n = 0; n < items.length; n++) {
      if (items[n] && items[n].kind === 'file') {
        var fileBlob = items[n].getAsFile();
        var fileReader = new FileReader();
        // Define events to fire after the file is read into memory.
        fileReader.onload = function() {
          Drupal.fileFieldSources.pasteSubmit(targetElement, filename, this.result);
        };
        fileReader.onerror = function() {
          Drupal.fileFieldSources.pasteError(targetElement, Drupal.t('Error reading file from clipboard.'));
        };
        // Read in the file to fire the above events.
        fileReader.readAsDataURL(fileBlob);
        fileFound = true;
        break;
      }
      // Handle files that a copy/pasted as a file reference.
      //if (types[n] && types[n] === 'Files') {
      //  TODO: Figure out how to capture copy/paste of entire files from desktop.
      //}
    }
    if (!fileFound) {
      Drupal.fileFieldSources.pasteError(targetElement, Drupal.t('No file in clipboard.'));
    }
    return false;
  },

  /**
   * For browsers that don't support native clipboardData attributes.
   */
  waitForPaste: function(targetElement) {
    if (targetElement.children && targetElement.children.length > 0) {
      var filename = targetElement.firstChild ? targetElement.firstChild.textContent : '';
      var tagFound = false;
      $(targetElement).find('img[src^="data:image"]').each(function(n, element) {
        Drupal.fileFieldSources.pasteSubmit(targetElement, filename, element.src);
        tagFound = true;
      });
      $(targetElement).html(filename);
      if (!tagFound) {
        Drupal.fileFieldSources.pasteError(targetElement, Drupal.t('No file in clipboard.'));
      }
    }
    else {
      setTimeout(function() {
        Drupal.fileFieldSources.waitForPaste(targetElement);
      }, 200);
    }
  },

  /**
   * Set an error on the paste field temporarily then clear it.
   */
  pasteError: function(domElement, errorMessage) {
    var $description = $(domElement).parents('.filefield-source-clipboard:first').find('.description');
    if (!$description.data('originalDescription')) {
      $description.data('originalDescription', $description.html())
    }
    $description.html(errorMessage);
    var errorTimeout = setTimeout(function() {
      $description.html($description.data('originalDescription'));
      $(this).unbind('click.pasteError');
    }, 3000);
    $(domElement).bind('click.pasteError', function() {
      clearTimeout(errorTimeout);
      $description.html($description.data('originalDescription'));
      $(this).unbind('click.pasteError');
    });
  },

  /**
   * After retreiving a clipboard, post the results to the server.
   */
  pasteSubmit: function(targetElement, filename, contents) {
    var $wrapper = $(targetElement).parents('.filefield-source-clipboard');
    $wrapper.find('.filefield-source-clipboard-filename').val(filename);
    $wrapper.find('.filefield-source-clipboard-contents').val(contents);
    $wrapper.find('input.form-submit').trigger('mousedown');
  }
};

})(jQuery);
;
(function ($) {

/**
 * Attaches sticky table headers.
 */
Drupal.behaviors.tableHeader = {
  attach: function (context, settings) {
    if (!$.support.positionFixed) {
      return;
    }

    $('table.sticky-enabled', context).once('tableheader', function () {
      $(this).data("drupal-tableheader", new Drupal.tableHeader(this));
    });
  }
};

/**
 * Constructor for the tableHeader object. Provides sticky table headers.
 *
 * @param table
 *   DOM object for the table to add a sticky header to.
 */
Drupal.tableHeader = function (table) {
  var self = this;

  this.originalTable = $(table);
  this.originalHeader = $(table).children('thead');
  this.originalHeaderCells = this.originalHeader.find('> tr > th');
  this.displayWeight = null;

  // React to columns change to avoid making checks in the scroll callback.
  this.originalTable.bind('columnschange', function (e, display) {
    // This will force header size to be calculated on scroll.
    self.widthCalculated = (self.displayWeight !== null && self.displayWeight === display);
    self.displayWeight = display;
  });

  // Clone the table header so it inherits original jQuery properties. Hide
  // the table to avoid a flash of the header clone upon page load.
  this.stickyTable = $('
')
    .insertBefore(this.originalTable)
    .css({ position: 'fixed', top: '0px' });
  this.stickyHeader = this.originalHeader.clone(true)
    .hide()
    .appendTo(this.stickyTable);
  this.stickyHeaderCells = this.stickyHeader.find('> tr > th');

  this.originalTable.addClass('sticky-table');
  $(window)
    .bind('scroll.drupal-tableheader', $.proxy(this, 'eventhandlerRecalculateStickyHeader'))
    .bind('resize.drupal-tableheader', { calculateWidth: true }, $.proxy(this, 'eventhandlerRecalculateStickyHeader'))
    // Make sure the anchor being scrolled into view is not hidden beneath the
    // sticky table header. Adjust the scrollTop if it does.
    .bind('drupalDisplaceAnchor.drupal-tableheader', function () {
      window.scrollBy(0, -self.stickyTable.outerHeight());
    })
    // Make sure the element being focused is not hidden beneath the sticky
    // table header. Adjust the scrollTop if it does.
    .bind('drupalDisplaceFocus.drupal-tableheader', function (event) {
      if (self.stickyVisible && event.clientY < (self.stickyOffsetTop + self.stickyTable.outerHeight()) && event.$target.closest('sticky-header').length === 0) {
        window.scrollBy(0, -self.stickyTable.outerHeight());
      }
    })
    .triggerHandler('resize.drupal-tableheader');

  // We hid the header to avoid it showing up erroneously on page load;
  // we need to unhide it now so that it will show up when expected.
  this.stickyHeader.show();
};

/**
 * Event handler: recalculates position of the sticky table header.
 *
 * @param event
 *   Event being triggered.
 */
Drupal.tableHeader.prototype.eventhandlerRecalculateStickyHeader = function (event) {
  var self = this;
  var calculateWidth = event.data && event.data.calculateWidth;

  // Reset top position of sticky table headers to the current top offset.
  this.stickyOffsetTop = Drupal.settings.tableHeaderOffset ? eval(Drupal.settings.tableHeaderOffset + '()') : 0;
  this.stickyTable.css('top', this.stickyOffsetTop + 'px');

  // Save positioning data.
  var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
  if (calculateWidth || this.viewHeight !== viewHeight) {
    this.viewHeight = viewHeight;
    this.vPosition = this.originalTable.offset().top - 4 - this.stickyOffsetTop;
    this.hPosition = this.originalTable.offset().left;
    this.vLength = this.originalTable[0].clientHeight - 100;
    calculateWidth = true;
  }

  // Track horizontal positioning relative to the viewport and set visibility.
  var hScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
  var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - this.vPosition;
  this.stickyVisible = vOffset > 0 && vOffset < this.vLength;
  this.stickyTable.css({ left: (-hScroll + this.hPosition) + 'px', visibility: this.stickyVisible ? 'visible' : 'hidden' });

  // Only perform expensive calculations if the sticky header is actually
  // visible or when forced.
  if (this.stickyVisible && (calculateWidth || !this.widthCalculated)) {
    this.widthCalculated = true;
    var $that = null;
    var $stickyCell = null;
    var display = null;
    var cellWidth = null;
    // Resize header and its cell widths.
    // Only apply width to visible table cells. This prevents the header from
    // displaying incorrectly when the sticky header is no longer visible.
    for (var i = 0, il = this.originalHeaderCells.length; i < il; i += 1) {
      $that = $(this.originalHeaderCells[i]);
      $stickyCell = this.stickyHeaderCells.eq($that.index());
      display = $that.css('display');
      if (display !== 'none') {
        cellWidth = $that.css('width');
        // Exception for IE7.
        if (cellWidth === 'auto') {
          cellWidth = $that[0].clientWidth + 'px';
        }
        $stickyCell.css({'width': cellWidth, 'display': display});
      }
      else {
        $stickyCell.css('display', 'none');
      }
    }
    this.stickyTable.css('width', this.originalTable.css('width'));
  }
};

})(jQuery);
;
(function ($) {

/**
 * Toggle the visibility of a fieldset using smooth animations.
 */
Drupal.toggleFieldset = function (fieldset) {
  var $fieldset = $(fieldset);
  if ($fieldset.is('.collapsed')) {
    var $content = $('> .fieldset-wrapper', fieldset).hide();
    $fieldset
      .removeClass('collapsed')
      .trigger({ type: 'collapsed', value: false })
      .find('> legend span.fieldset-legend-prefix').html(Drupal.t('Hide'));
    $content.slideDown({
      duration: 'fast',
      easing: 'linear',
      complete: function () {
        Drupal.collapseScrollIntoView(fieldset);
        fieldset.animating = false;
      },
      step: function () {
        // Scroll the fieldset into view.
        Drupal.collapseScrollIntoView(fieldset);
      }
    });
  }
  else {
    $fieldset.trigger({ type: 'collapsed', value: true });
    $('> .fieldset-wrapper', fieldset).slideUp('fast', function () {
      $fieldset
        .addClass('collapsed')
        .find('> legend span.fieldset-legend-prefix').html(Drupal.t('Show'));
      fieldset.animating = false;
    });
  }
};

/**
 * Scroll a given fieldset into view as much as possible.
 */
Drupal.collapseScrollIntoView = function (node) {
  var h = document.documentElement.clientHeight || document.body.clientHeight || 0;
  var offset = document.documentElement.scrollTop || document.body.scrollTop || 0;
  var posY = $(node).offset().top;
  var fudge = 55;
  if (posY + node.offsetHeight + fudge > h + offset) {
    if (node.offsetHeight > h) {
      window.scrollTo(0, posY);
    }
    else {
      window.scrollTo(0, posY + node.offsetHeight - h + fudge);
    }
  }
};

Drupal.behaviors.collapse = {
  attach: function (context, settings) {
    $('fieldset.collapsible', context).once('collapse', function () {
      var $fieldset = $(this);
      // Expand fieldset if there are errors inside, or if it contains an
      // element that is targeted by the URI fragment identifier.
      var anchor = location.hash && location.hash != '#' ? ', ' + location.hash : '';
      if ($fieldset.find('.error' + anchor).length) {
        $fieldset.removeClass('collapsed');
      }

      var summary = $('');
      $fieldset.
        bind('summaryUpdated', function () {
          var text = $.trim($fieldset.drupalGetSummary());
          summary.html(text ? ' (' + text + ')' : '');
        })
        .trigger('summaryUpdated');

      // Turn the legend into a clickable link, but retain span.fieldset-legend
      // for CSS positioning.
      var $legend = $('> legend .fieldset-legend', this);

      $('')
        .append($fieldset.hasClass('collapsed') ? Drupal.t('Show') : Drupal.t('Hide'))
        .prependTo($legend)
        .after(' ');

      // .wrapInner() does not retain bound events.
      var $link = $('')
        .prepend($legend.contents())
        .appendTo($legend)
        .click(function () {
          var fieldset = $fieldset.get(0);
          // Don't animate multiple times.
          if (!fieldset.animating) {
            fieldset.animating = true;
            Drupal.toggleFieldset(fieldset);
          }
          return false;
        });

      $legend.append(summary);
    });
  }
};

})(jQuery);
;

(function ($) {

Drupal.behaviors.redirectFieldsetSummaries = {
  attach: function (context) {
    $('fieldset.redirect-list', context).drupalSetSummary(function (context) {
      if ($('table.redirect-list tbody td.empty', context).size()) {
        return Drupal.t('No redirects');
      }
      else {
        var redirects = $('table.redirect-list tbody tr').size();
        return Drupal.formatPlural(redirects, '1 redirect', '@count redirects');
      }
    });
  }
};

})(jQuery);
;

/**
 * @file
 * Attaches behaviors for the Path module.
 */

(function ($) {

Drupal.behaviors.pathFieldsetSummaries = {
  attach: function (context) {
    $('fieldset.path-form', context).drupalSetSummary(function (context) {
      var path = $('.form-item-path-alias input').val();

      return path ?
        Drupal.t('Alias: @alias', { '@alias': path }) :
        Drupal.t('No alias');
    });
  }
};

})(jQuery);
;

(function ($) {

Drupal.behaviors.metatagFieldsetSummaries = {
  attach: function (context) {
    $('fieldset.metatags-form', context).drupalSetSummary(function (context) {
      var vals = [];
      $("input[type='text'], select, textarea", context).each(function() {
        var default_name = $(this).attr('name').replace(/\[value\]/, '[default]');
        var default_value = $("input[type='hidden'][name='" + default_name + "']", context);
        if (default_value.length && default_value.val() == $(this).val()) {
          // Meta tag has a default value and form value matches default value.
          return true;
        }
        else if (!default_value.length && !$(this).val().length) {
          // Meta tag has no default value and form value is empty.
          return true;
        }
        var label = $("label[for='" + $(this).attr('id') + "']").text();
        vals.push(Drupal.t('@label: @value', {
          '@label': $.trim(label),
          '@value': Drupal.truncate($(this).val(), 25) || Drupal.t('None')
        }));
      });
      if (vals.length === 0) {
        return Drupal.t('Using defaults');
      }
      else {
        return vals.join('
');
      }
    });
  }
};

/**
 * Encode special characters in a plain-text string for display as HTML.
 */
Drupal.truncate = function (str, limit) {
  if (str.length > limit) {
    return str.substr(0, limit) + '...';
  }
  else {
    return str;
  }
};

})(jQuery);
;
(function ($) {

/**
 * Attaches the autocomplete behavior to all required fields.
 */
Drupal.behaviors.autocomplete = {
  attach: function (context, settings) {
    var acdb = [];
    $('input.autocomplete', context).once('autocomplete', function () {
      var uri = this.value;
      if (!acdb[uri]) {
        acdb[uri] = new Drupal.ACDB(uri);
      }
      var $input = $('#' + this.id.substr(0, this.id.length - 13))
        .attr('autocomplete', 'OFF')
        .attr('aria-autocomplete', 'list');
      $($input[0].form).submit(Drupal.autocompleteSubmit);
      $input.parent()
        .attr('role', 'application')
        .append($('')
          .attr('id', $input.attr('id') + '-autocomplete-aria-live')
        );
      new Drupal.jsAC($input, acdb[uri]);
    });
  }
};

/**
 * Prevents the form from submitting if the suggestions popup is open
 * and closes the suggestions popup when doing so.
 */
Drupal.autocompleteSubmit = function () {
  return $('#autocomplete').each(function () {
    this.owner.hidePopup();
  }).length == 0;
};

/**
 * An AutoComplete object.
 */
Drupal.jsAC = function ($input, db) {
  var ac = this;
  this.input = $input[0];
  this.ariaLive = $('#' + this.input.id + '-autocomplete-aria-live');
  this.db = db;

  $input
    .keydown(function (event) { return ac.onkeydown(this, event); })
    .keyup(function (event) { ac.onkeyup(this, event); })
    .blur(function () { ac.hidePopup(); ac.db.cancel(); });

};

/**
 * Handler for the "keydown" event.
 */
Drupal.jsAC.prototype.onkeydown = function (input, e) {
  if (!e) {
    e = window.event;
  }
  switch (e.keyCode) {
    case 40: // down arrow.
      this.selectDown();
      return false;
    case 38: // up arrow.
      this.selectUp();
      return false;
    default: // All other keys.
      return true;
  }
};

/**
 * Handler for the "keyup" event.
 */
Drupal.jsAC.prototype.onkeyup = function (input, e) {
  if (!e) {
    e = window.event;
  }
  switch (e.keyCode) {
    case 16: // Shift.
    case 17: // Ctrl.
    case 18: // Alt.
    case 20: // Caps lock.
    case 33: // Page up.
    case 34: // Page down.
    case 35: // End.
    case 36: // Home.
    case 37: // Left arrow.
    case 38: // Up arrow.
    case 39: // Right arrow.
    case 40: // Down arrow.
      return true;

    case 9:  // Tab.
    case 13: // Enter.
    case 27: // Esc.
      this.hidePopup(e.keyCode);
      return true;

    default: // All other keys.
      if (input.value.length > 0 && !input.readOnly) {
        this.populatePopup();
      }
      else {
        this.hidePopup(e.keyCode);
      }
      return true;
  }
};

/**
 * Puts the currently highlighted suggestion into the autocomplete field.
 */
Drupal.jsAC.prototype.select = function (node) {
  this.input.value = $(node).data('autocompleteValue');
};

/**
 * Highlights the next suggestion.
 */
Drupal.jsAC.prototype.selectDown = function () {
  if (this.selected && this.selected.nextSibling) {
    this.highlight(this.selected.nextSibling);
  }
  else if (this.popup) {
    var lis = $('li', this.popup);
    if (lis.length > 0) {
      this.highlight(lis.get(0));
    }
  }
};

/**
 * Highlights the previous suggestion.
 */
Drupal.jsAC.prototype.selectUp = function () {
  if (this.selected && this.selected.previousSibling) {
    this.highlight(this.selected.previousSibling);
  }
};

/**
 * Highlights a suggestion.
 */
Drupal.jsAC.prototype.highlight = function (node) {
  if (this.selected) {
    $(this.selected).removeClass('selected');
  }
  $(node).addClass('selected');
  this.selected = node;
  $(this.ariaLive).html($(this.selected).html());
};

/**
 * Unhighlights a suggestion.
 */
Drupal.jsAC.prototype.unhighlight = function (node) {
  $(node).removeClass('selected');
  this.selected = false;
  $(this.ariaLive).empty();
};

/**
 * Hides the autocomplete suggestions.
 */
Drupal.jsAC.prototype.hidePopup = function (keycode) {
  // Select item if the right key or mousebutton was pressed.
  if (this.selected && ((keycode && keycode != 46 && keycode != 8 && keycode != 27) || !keycode)) {
    this.input.value = $(this.selected).data('autocompleteValue');
  }
  // Hide popup.
  var popup = this.popup;
  if (popup) {
    this.popup = null;
    $(popup).fadeOut('fast', function () { $(popup).remove(); });
  }
  this.selected = false;
  $(this.ariaLive).empty();
};

/**
 * Positions the suggestions popup and starts a search.
 */
Drupal.jsAC.prototype.populatePopup = function () {
  var $input = $(this.input);
  var position = $input.position();
  // Show popup.
  if (this.popup) {
    $(this.popup).remove();
  }
  this.selected = false;
  this.popup = $('

')[0];
  this.popup.owner = this;
  $(this.popup).css({
    top: parseInt(position.top + this.input.offsetHeight, 10) + 'px',
    left: parseInt(position.left, 10) + 'px',
    width: $input.innerWidth() + 'px',
    display: 'none'
  });
  $input.before(this.popup);

  // Do search.
  this.db.owner = this;
  this.db.search(this.input.value);
};

/**
 * Fills the suggestion popup with any matches received.
 */
Drupal.jsAC.prototype.found = function (matches) {
  // If no value in the textfield, do not show the popup.
  if (!this.input.value.length) {
    return false;
  }

  // Prepare matches.
  var ul = $('

');
  var ac = this;
  for (key in matches) {
    $('

')
      .html($('

').html(matches[key]))
      .mousedown(function () { ac.select(this); })
      .mouseover(function () { ac.highlight(this); })
      .mouseout(function () { ac.unhighlight(this); })
      .data('autocompleteValue', key)
      .appendTo(ul);
  }

  // Show popup with matches, if any.
  if (this.popup) {
    if (ul.children().length) {
      $(this.popup).empty().append(ul).show();
      $(this.ariaLive).html(Drupal.t('Autocomplete popup'));
    }
    else {
      $(this.popup).css({ visibility: 'hidden' });
      this.hidePopup();
    }
  }
};

Drupal.jsAC.prototype.setStatus = function (status) {
  switch (status) {
    case 'begin':
      $(this.input).addClass('throbbing');
      $(this.ariaLive).html(Drupal.t('Searching for matches...'));
      break;
    case 'cancel':
    case 'error':
    case 'found':
      $(this.input).removeClass('throbbing');
      break;
  }
};

/**
 * An AutoComplete DataBase object.
 */
Drupal.ACDB = function (uri) {
  this.uri = uri;
  this.delay = 300;
  this.cache = {};
};

/**
 * Performs a cached and delayed search.
 */
Drupal.ACDB.prototype.search = function (searchString) {
  var db = this;
  this.searchString = searchString;

  // See if this string needs to be searched for anyway.
  searchString = searchString.replace(/^\s+|\s+$/, '');
  if (searchString.length <= 0 ||
    searchString.charAt(searchString.length - 1) == ',') {
    return;
  }

  // See if this key has been searched for before.
  if (this.cache[searchString]) {
    return this.owner.found(this.cache[searchString]);
  }

  // Initiate delayed search.
  if (this.timer) {
    clearTimeout(this.timer);
  }
  this.timer = setTimeout(function () {
    db.owner.setStatus('begin');

    // Ajax GET request for autocompletion. We use Drupal.encodePath instead of
    // encodeURIComponent to allow autocomplete search terms to contain slashes.
    $.ajax({
      type: 'GET',
      url: db.uri + '/' + Drupal.encodePath(searchString),
      dataType: 'json',
      success: function (matches) {
        if (typeof matches.status == 'undefined' || matches.status != 0) {
          db.cache[searchString] = matches;
          // Verify if these are still the matches the user wants to see.
          if (db.searchString == searchString) {
            db.owner.found(matches);
          }
          db.owner.setStatus('found');
        }
      },
      error: function (xmlhttp) {
        alert(Drupal.ajaxError(xmlhttp, db.uri));
      }
    });
  }, this.delay);
};

/**
 * Cancels the current autocomplete request.
 */
Drupal.ACDB.prototype.cancel = function () {
  if (this.owner) this.owner.setStatus('cancel');
  if (this.timer) clearTimeout(this.timer);
  this.searchString = '';
};

})(jQuery);
;
(function ($) {

Drupal.behaviors.nqp = {
  attach: function(context) {
    var title = $('input[name="title"]');

    // Update the title in Nodequeue Settings when the title changes and
    // when the page first loads.
    title.bind('change input keyup paste', function () {
      var titleVal = (title.val()) ? title.val() : Drupal.t('(Untitled)');
      $('li.nqp-node-title-existing a, li.nqp-node-title-added').text(titleVal);
    }).trigger('change');

    // Update a queue list when the queue checkbox is changed and
    // when the page first loads.
    $('input.nqp-node-enabled').bind('change', function () {
      var qname_matches = $(this).attr('name').match('^nqp_(.+)_enabled$');
      var qname = qname_matches[1];
      var titleVal = (title.val()) ? title.val() : Drupal.t('(Untitled)');
      queue = $(this).closest('div.nqp-queue');
      nqp_update_list(queue, qname, titleVal);
    }).trigger('change');
  }
};

Drupal.behaviors.nqpFieldsetSummaries = {
  attach: function (context) {
    $('fieldset#edit-nodequeue-publish', context).drupalSetSummary(function(context) {
      var nqp_queue_list = '';
      $('div.nqp-queue').each(function() {
        if ($(this).find('input.nqp-node-enabled').is(':checked')) {
          if (nqp_queue_list == '') {
            nqp_queue_list += $(this).find('span.nqp-queue-title').text();
          } else {
            nqp_queue_list += ', ' + $(this).find('span.nqp-queue-title').text();
          }
        }
      });
      if (nqp_queue_list == '') {
        return Drupal.t('Not included in queues');
      } else {
        return Drupal.t('Included in: ') + nqp_queue_list;
      }
    });
  }
};

function nqp_update_list(queue, qname, nodeTitle) {
  var settings = Drupal.settings.nqp[qname];
  var queueSize = settings.queue['size'];
  var queueReverse = settings.queue['reverse'];
  var queueCount = settings.queue['count'];
  var nodeTitleExisting = queue.find('li.nqp-node-title-existing');
  var nodeTitleNew = queue.find('li.nqp-node-title-added');
  var queueTitles = queue.find('div.nqp-node-titles ul li');
  var queueEmpty = queue.find('div.nqp-queue-empty');

  if ($(queue).find('input.nqp-node-enabled').is(':checked')) {
    if (nodeTitleExisting.hasClass('nqp-node-title-existing')) {
      nodeTitleExisting.removeClass('nqp-node-title-removed');
    } else {
      if (queueEmpty.text()) {
        queueEmpty.remove();
        queue.find('div.nqp-node-titles').append("
\n
" + nodeTitle + "
\n
");
      }
      if (queueReverse == 1) {
        queueTitles.first().before($('
' + nodeTitle + '
').addClass('nqp-node-title-added'));
        if (queueSize > 0 && queueCount + 1 > queueSize) {
          queueTitles.last().addClass('nqp-node-title-removed');
        }
      } else {
        queueTitles.last().after($('
' + nodeTitle + '
').addClass('nqp-node-title-added'));
        if (queueSize > 0 && queueCount + 1 > queueSize) {
          queueTitles.first().addClass('nqp-node-title-removed');
        }
      }
    }
  } else {
    nodeTitleNew.remove();
    if (queueCount == 0) {
      queue.find('div.nqp-node-titles ul').remove();
      if (! queueEmpty.text()) {
        queue.find('div.nqp-node-titles').append('
(' + Drupal.t('This queue is empty') + ')
');
      }
    }
    queueTitles.removeClass('nqp-node-title-removed');
    nodeTitleExisting.addClass('nqp-node-title-removed');
  }
}

}) (jQuery);
;

(function ($) {

Drupal.behaviors.nodeFieldsetSummaries = {
  attach: function (context) {
    $('fieldset.node-form-revision-information', context).drupalSetSummary(function (context) {
      var revisionCheckbox = $('.form-item-revision input', context);

      // Return 'New revision' if the 'Create new revision' checkbox is checked,
      // or if the checkbox doesn't exist, but the revision log does. For users
      // without the "Administer content" permission the checkbox won't appear,
      // but the revision log will if the content type is set to auto-revision.
      if (revisionCheckbox.is(':checked') || (!revisionCheckbox.length && $('.form-item-log textarea', context).length)) {
        return Drupal.t('New revision');
      }

      return Drupal.t('No revision');
    });

    $('fieldset.node-form-author', context).drupalSetSummary(function (context) {
      var name = $('.form-item-name input', context).val() || Drupal.settings.anonymous,
        date = $('.form-item-date input', context).val();
      return date ?
        Drupal.t('By @name on @date', { '@name': name, '@date': date }) :
        Drupal.t('By @name', { '@name': name });
    });

    $('fieldset.node-form-options', context).drupalSetSummary(function (context) {
      var vals = [];

      $('input:checked', context).parent().each(function () {
        vals.push(Drupal.checkPlain($.trim($(this).text())));
      });

      if (!$('.form-item-status input', context).is(':checked')) {
        vals.unshift(Drupal.t('Not published'));
      }
      return vals.join(', ');
    });
  }
};

})(jQuery);
;

redpajama_set_name: RedPajamaGithub


text:
FOX Sports premieres Inside PBC Boxing this Saturday, December 15
Dec 13, 2018 By PBC Editor
WBC welterweight champion Shawn Porter and former three-division world champion Abner Mares serve as analysts with veteran host Kate Abdo and FOX Sports boxing insider Mike Coppinger.
Mike Coppinger, Kate Abdo, Shawn Porter and Abner Mares at Fox's "Inside PBC Boxing" at Fox Studios on December 10, 2018 in Los Angeles, California. (Frank Micelotta/Fox/PictureGroup)
LOS ANGELES — FOX Sports today announces the premiere of its new studio show INSIDE PBC BOXING on FOX on Saturday, Dec. 15 (3:00 PM ET). INSIDE PBC BOXING is the official show of Premier Boxing Champions, hosted by Kate Abdo, along with analysts WBC Welterweight Champion Shawn Porter and former three-division world champion Abner Mares. The show also features FOX Sports boxing insider Mike Coppinger, who will add breaking news and special reports.
"FOX Sports is thrilled to be expanding PBC boxing programming with this studio show," said Steve Becker, FOX Sports Vice President of Production. "We look to go inside the stories of the PBC boxers with in-depth interviews and feature profiles, as well as previews of upcoming fights and breakdowns of the most-recent, thrilling matchups. Having current boxers Shawn and Abner working with us will provide some honest commentary on what's happening in the sport right now."
Porter, who makes his first title defense against top-rated challenger Yordenis Ugas live on FOX on Saturday, March 9, 2019 is excited to be a part of the studio show: "Honestly, sports is my thing! It's a Cleveland thing. That's what we do back home." Porter continued, "So, I always knew past competing, I'd want to be involved in TV, talking boxing. To be doing this show on FOX right now is an incredible opportunity for myself, especially because I know the treats [that are] about to be delivered on network television to all the boxing fans out there."
While Mares is waiting for his next opponent to be announced, he's enthusiastic about the studio opportunity as well: "I'm thrilled to be a part of FOX Sports' new boxing show, INSIDE PBC BOXING and working with Kate, Shawn and Mike. I'm looking forward to talking to the biggest names in boxing, helping break down the most exciting fights, and telling viewers what's really happening inside the ring."
As a boxing enthusiast, who's also hosted several FOX PBC Fight Nights, Abdo is thrilled to be a part of the regular studio show. "As a huge boxing fan, I could not be more excited to host FOX's new INSIDE PBC BOXING show. The PBC stable is second to none, and I can't wait to shine a light on all that talent. Talking boxing with Shawn and Abner will be zero work, all pleasure." She'll also continue to host FOX PBC Fight Nights throughout the year.
Porter (29-2-1, 17 KOs) won the WBC belt with a decision victory over Danny Garcia in September. The Akron, Ohio native won the IBF Welterweight title against Devon Alexander on Dec. 7, 2013, then defended it in April 2014 with a two-knockdown, fourth-round stoppage of two-division champion Paulie Malignaggie, before losing a majority decision loss to England's Kell Brook in August 2014. His only other loss came in a Fight of the Year-caliber unanimous decision to champion Keith Thurman in June, 2016.
Mares (31-3-1, 15 KOs) is a strategic and crowd-pleasing boxer-puncher. His five-fight run between August 2011 and May 2015 produced world championships at 118, 122 and 126 pounds. Born in Mexico, Mares' split decision win over Jesus Cuellar in December 2016 regained him a 126-pound title, but he lost it in a second classic clash with fellow Los Angeles-based, three-division champion Leo Santa Cruz in June of this year.
With the recently announced deal, the FOX broadcast network and FOX Deportes will feature 10 marquee fight nights in prime time each year, while FS1 and FOX Deportes will telecast 12 fight nights annually. The Emmy Award-winning FOX Sports production team will produce more than 175 hours of original PBC boxing content per year across its channels, including INSIDE PBC BOXING on FOX and FS1, PBC COUNTDOWN and PBC FACE TO FACE shows prior to all fights.
All PBC on FOX Sports programming and events will be streamed live on the FOX Sports app. Follow @PBConFOX on Twitter, Facebook and Instagram.
Inside PBC Boxing
Abner Mares
Get News that packs a punch!
Get the latest fight announcements, fighter spotlights, and other PBC news delivered to your inbox.
Please enter a valid email Enter Email
Please select the checkbox to agree and sign up By signing up I certify I am at least 13 years old and wish to receive news emails from PBC. I agree to PBC's terms and conditions and privacy policy.
Keep an eye on your inbox for the latest boxing news, highlights and exclusive content from PBC.
Never miss a fight! Add our schedule to your calendar and receive a reminder before each PBC fight.
The PBC Podcast: Yordenis Ugas, Jarrett Hurd
The PBC Podcast: Stephen "Breadman" Edwards, Davis-Garcia & More
Davis Stops Garcia in Battle of Unbeaten Champions
Gervonta Davis vs. Hector Luis Garcia: Bang For Your Buck
Rashidi Ellis: It's time to prove what I can do!
The 10 Hardest Punchers in Heavyweight History
Charlo seeing clearly for first time as he focuses on beating Williams
12 Rounds With ... Gervonta Davis
12 Rounds With … Stephen Fulton
The Art of Refereeing and Scoring Fights: The Essentials
Sep 05, 2022 / Ruiz vs Ortiz, Cruz vs Ramirez, Mares vs Flores, Valenzuela vs De Los Santos, Andy Ruiz Jr, Luis Ortiz, Isaac Cruz, Eduardo Ramirez, Miguel Flores, Abner Mares, Jose Valenzuela, Edwin De Los Santos
Andy Ruiz Drops Luis Ortiz Three Times, Wins Unanimous Decision
The former unified heavyweight champion puts on a power punching display, taking a major step toward another world title shot in the main event of FOX Sports PBC Pay-Per-View from Crypto.com Arena in Los Angeles.
Aug 31, 2022 / Mares vs Flores, Abner Mares
Abner Mares Still Has An Itch for Combat
The accomplished three-division champ discusses his time away and reasons for returning to the ring to face the dangerous Miguel Flores in a lightweight battle Sunday, September 4 on FOX Sports PBC Pay-Per-View.
Jul 20, 2022 / The PBC Podcast, Abner Mares
The PBC Podcast: Abner Mares Opens Up
The former three-division champ tells all in this candid conversation ahead of his showdown against Miguel Flores Saturday, September 4 on FOX Sports Pay-Per-View.
I already get fight alerts

redpajama_set_name: RedPajamaCommonCrawl


What do you get when you combine the creative vision of a haunted house specialist with a venue such as the Southampton Arts Center? A Spooktacular Haunted House.
For the last two weeks in October, the Southampton Arts Center will transform the majority of the Hamptons venue into a haunted house that caters both to families that want something "a little scary" and those looking for an experience that's more spine-tingling. The Spooktacular Haunted House will feature clowns, zombies, an evil butcher, monsters hiding under beds, skeletons, and will take the visitor through seven rooms for a "horrifying, blood-curdling, and entertaining experience."
From 5:30 to 7 p.m. on Thursday through Saturday, visitors can expect an experience that is only mildly scary - as this is the time designated for families with young children. The haunted house will then be transformed to greet its more fright-seeking visitors at 7:30 until 10 p.m. On Sundays, the house will be open from 4 p.m. to 8 p.m. The Spooktacular Haunted House will launch on Friday, October 20.
The project is spearheaded by Oscar Gonzalez, who has created haunted houses in Shelter Island, Mattituck, and previously here at the Southampton Arts Center.
"Oscar Gonzalez and his team create a spine-tingling haunted house that the entire community will enjoy," shared Southampton Arts Center Board Secretary Fairley Pilaro. "We are also very pleased to keep the admission price at just $5, and to once again offer an opportunity for students to earn valuable community service hours as Scare Team volunteers."
While visiting, one can also check out the SAC's current exhibit of Steampunk art. Be sure to catch it before it closes on Sunday, November 12.
"The quirky and unusual feel extends out to our current exhibition, Odd Beauty: The Techno Eccentric World of Steampunk, curated by Art Donovan, which includes over 120 works from internationally renowned artists in the movement, and is one of the largest collections to date of artwork in this genre shown under one roof," explained Southampton Arts Center Director of Programs Amy Kirwin. "It's the perfect pairing for a simply spooktacular Halloween."
Southampton Arts Center is located at 25 Jobs Lane in Southampton. For more information on Spooktacular visiting hours, please call 631-283-0967 or visit southamptonartscenter.org.


text:
Dean Stanton Wortham
About Carolyn and Peter Lynch
Catholic Education Research Initiative
Formative Education Initiative
Why LSEHD?
Undergraduate Admission & Aid
Applied Psychology and Human Development
Transformative Educational Studies
Lynch School Minors
Experience, Reflection, Action (ERA)
Internal Transfer
Education Licensure
Counseling Licensure
professional-certificates-instructional-design
Certificate in Human Rights and International Justice
Certificate in Positive Youth Development
Certificate in Child and Family Mental Health
Certificate in Social Justice Leadership
Certificate in Educational Policy Development
Certificate in International Higher Education
Certificate in Institutional Research
Certificate in Serving Exceptional Learners in Catholic Schools
Certificate in Autism Spectrum Disorder
Certificate in Bilingual Education
Certificate in Deafblindness
Certificate in Teaching English Language Learners
Certificate in Global Perspectives in Curriculum and Instruction
Certificate in Inclusive Instructional Design
Certificate in Traumatic Stress Studies and Intervention
CDEP
Master of Arts (M.A.) in Mental Health Counseling
Master of Arts (M.A.) in School Counseling
Dual Master of Arts (M.A./M.A.) in Theology and Ministry and Counseling Psychology
Doctor of Philosophy (Ph.D.) in Applied Developmental and Educational Psychology
Doctor of Philosophy (Ph.D.) in Counseling Psychology
Counseling Practicum
Applied Psychology Practicum
z_archive
applied-developmental-and-educational-psychology-ma
/counseling-psychology-phd
school-counseling
mental-health-counseling
counseling-psychology-phd
Faculty & Expertise
Program Aims & Learning Outcomes
Student Admissions, Outcomes, & Other Data
Counseling Psychology Accreditation
ELHE
Educational Leadership and Policy, M.Ed.
Master of Arts (M.A.) in Higher Education
Higher Education Interview Days
Master of Arts (M.A.) in International Higher Education
Dual Degree Program (M.A./M.B.A.)
Dual Degree Program (J.D./M.Ed./M.A.)
Doctor of Education (Ed.D.) in Educational Leadership
Doctor of Philosophy (Ph.D.) in Higher Education
M.S. in Applied Statistics and Psychometrics
M.A. in Research and Evaluation Methods
Doctor of Philosophy (Ph.D.) in Measurement, Evaluation, Statistics, and Assessment
_z_archive
New MESA Faculty Member
Margeau Jong
MESA Testimonials
applied-statistics-and-psychometrics-ms
Graduate Testimonials
Graduate Voices
MESA Students
MESA Alumni & Employment Data
MESA Research
Master of Education (M.Ed./C.A.E.S.) in Curriculum and Instruction
Master of Education (M.Ed.) in Early Childhood Education
Master of Education (M.Ed.) in Elementary Education
Master of Education (M.Ed.) in Jesuit Education in a Global World
Master of Education (M.Ed., C.A.E.S.) in Special Education for Moderate Support Needs
Master of Education in Secondary Education
Master of Education (M.Ed./C.A.E.S.) in Special Education for Extensive Support Needs
Doctor of Philosophy (Ph.D.) in Curriculum and Instruction
Special Education Licensure Offerings
M.Ed. in Elementary Education & Moderate Support Needs
Urban Catholic Teacher Corps
Faculty Directory & Expertise
AERA 2022 Presentations
Administrators in Catholic Higher Ed
Catholic Education Research
Community Justice & Engaged Pedagogy
Early Childhood Policy
Equitable Instruction Initiative
Formative Education
International Higher Ed
Center for Thriving Children
Psychological Humanities & Ethics
Roche Center
Testing, Evaluation, & Educational Policy
The Campus School
The Study of Race & Culture
TIMSS & PIRLS International Study Center
Urban Outreach Initiatives
Donovan Urban Teaching Scholars Program
Work Intervention Network
Mentoring & Advising
BC Resources
BC Campus Life
BC Veterans
Grants & Awards for Faculty and Students
Search Lynch School Website Search BC.edu
Lynch School students make an indelible impact on the lives of children and communities across the country. Through research that they conduct alongside prominent faculty, our students develop innovative ways to address social challenges and champion human strengths.
The funding that makes this meaningful work possible comes from Research Incentive Grants, internships, faculty grants, and other opportunities available through our four departments and the Boston College Office for Sponsored Programs.
Advanced Study Grant Projects
Learning from and teaching Sudanese Refugees in Uganda
Mapping the extent of major floods in Pennsylvania
Investigating counterterrorism and deradicalization strategies
About Advanced Study Grants
Carolyn A. and Peter S. Lynch School of Education and Human Development


Had a bit of a brainwave yesterday (or was it a stroke?). Instead of installing overhead street lights in two streets, in one of the streets there are going to be a host of neon signs (using LED technology) to suggest a busy night life.
Firstly, some pictures of such Parisian streets.
Where I intend placing these neon signs.
The other street will still have the overhead lights, as planned.
For some reason, as I cycled along the canal towpath that winds around the northern side of the city of Glasgow, I repeatedly, indeed, almost continually hummed a single song by Oasis. I didn't even hum a selection of their songs. And, it's not even my favourite Oasis song. And, I don't know any of the words!
Namely, "Supersonic" from their debut album, "Definitely Maybe".
In other words, finally finished Therapy by David Lodge.
When cycling along the canal towpath this afternoon was surprised (and pleased) to see a pair of policemen on what looked like motocross motorbikes - exactly like the one in the picture above.


"70-YEAR-OLD MAN CHOSE DOGS OVER HIS FAMILY. Maalaala Mo Kaya presents a special heartwarming "love story" this Saturday (August 4) of a 70-year-old man named Lolo Jessie (Nanding Josef) and his pet dogs Simba and Brownie, who taught him the meaning of a true family.
"Although grateful for his nephew who let him stay with his family, Lolo Jessie had no choice but to leave because his nephew's wife was not in favor of having dogs in their house. Lolo Jessie loved Simba and Bownie so much that he cannot abandon them and even promised to take care of them for the remaining years of his life.
"Together with Nanding in the MMK episode are Dingdong Avanzado, Jessa Zaragosa, Maliksi Morales, Jao Mapa, Liza Lorena, Keana Reeves, and Kazel Kinouchi.
"The episode was researched by Akeem del Rosario, written by Mark Duane Angos, and directed by Nick Olanka.
"Maalaala Mo Kaya (MMK) airs this Saturday, August 4, after Wansapanataym on ABS-CBN."


There was one new fire in the Northwest Region by mid-afternoon yesterday.
Generally cloudy skies and scattered showers across the region is helping to keep new starts down in the wake of the busiest day of the fire season. Sunday saw 31 new fires get their start, mostly in the Red Lake and Kenora Districts.
While residents of Kenora and area may be approximately 80 kilometres from Kenora fire #71, prevailing winds are bringing heavy smoke drift to their doorsteps.
The fast-growing fire, located at Huston Lake near the Manitoba border has grown to 2,000 hectares since it was discovered Sunday.
Lightning was its apparent cause.
Waterbombers have been working the fire to reduce its intensity, while fire crews have been engaged in values protection. A contingent of 20 firefighters from Saskatchewan arrived in Ontario today and will soon be deployed to the fire.
More out of province resources, including personnel from Alberta, the United States and Mexico are on en route to the Northwest Region to help ease the strain on resources while 30 of the region's fire crews assist the Northeast with an escalated fire situation of their own.
An ignition team has been sent to Red Lake fire #70, located near the western boundary of Woodland Caribou Provincial Park to try to bring the 1,400 hectare fire to natural boundaries.
FireRangers have been placing sprinkler units on various outpost cabins throughout the area of the fire.
The forest fire hazard is currently "high" in the Kenora and Dryden Districts. "Moderate" conditions prevail in the Fort Frances, Thunder Bay and southern portions of the Red Lake and Sioux Lookout Districts. Nipigon District varies from "moderate" to "high" along the north shore and "low" hazards conditions across the far north.


Below are a few DIY maintenance projects to help you save some money. If you are unsure on how to do an item, please contact a professional.
Dryer Vents: Cleaning out your dryer vent duct yearly and making sure it is only as long as it needs to be will help your clothes dry faster and reduce a fire hazard. First, pull your dryer out from the wall, disconnect the duct from the dryer and vacuum it out. If you had a lot of slack in the duct after pulling it out, then trim the duct length so that it's just long enough for you to pull the dryer a few feet out from the wall. Be careful not to crimp the duct pushing it back in.
Refrigerator Coils: You should clean off the coils on your refrigerator at least twice a year. The dust that builds up on them makes it harder for the heat to dissipate which causes it to run harder than needed. While you are cleaning the coils, it would be a good time to change out the water filter on it – most filters are not effective after 6 months of use.
HVAC Filters: The Filters need to be changed about every month, this helps the unit run more efficiently and prevent pre-mature failure by over working that motor trying to pull air through a dirty filter. To help remember, try and pick the same day each month to do it. Some newer digital thermostats will even have and indicator alerting you when it's time to change the filter.
Water Heater: Check the temperature that your water heater is maintaining your water temperature. If you find that you are always mixing cold water with your hot water to get it to a comfortable temperature, then you are wasting money by cooling the water you just paid to heat. Find a comfortable temperature and set the water heater to that.
Drips and Leaks: You can easily have 100's of gallons or more of water going down the drain each month by not fixing leaking plumbing fixtures or lines. If the water is leaking elsewhere, for instance around a toilet, under the house, etc… you may end up with major rot and/or mold issues that need to be dealt with which can easily run into the thousands, if not tens of thousands of dollars. A running toilet can easily send $50 a month down the drain.
Lighting: Consider changing out your bulbs to low consumption LED bulbs. Today's LED bulbs are much better at color rendering and come in different color temperatures such as soft white. But, if you're still stuck on the old incandescent bulbs consider a dimmer. Dimming a bulb by half saves 40% electricity and extends bulb life by 20 fold!
Do you have an energy hog in the garage: Older fridges are energy hogs and can run you up to $200 a year. There are plenty of people that will pick them up for free or even pay you for them. If you do have an appliance that is older than 9 years of age and is starting to go, consider getting a newer Energy Star rated one.


text:
Q: Correct formula for Mass Defect / Binding Energy? I'm a web developer and I have to change an online course. The course teaches Advanced Nuclear Theory. In the 'Mass Defect and Binding Energy' chapter, it has this formula:
$$\Delta M = Z(m_p) + N(m_n) - \frac{A}{Z}(M).$$
In the formula above, the letter 'p' and 'n' are written in subscript, and for the 'AZM' part, the letter A (written in superscript) is above the letter Z (which is in subscript). Above this equation, this is written
1/1(p) + 1/0(n) -> 2/1(D)

mass of proton = 1.007272 u
mass of neutron = 1.008665 u
mass of deuterium nuclear = 2.013553 u

. Below the equation which I wrote above (delta M = Z(mp) + N(mn) - A/Z(M)), the worker / user is asked to fill in the blank:
∆M = __ x __ + __ x __ - __

B.E. of nucleaus = 931.5 x __ MeV

When the neutron and proton combine, the nuclear force pulling them together does __ MeV of work.

Now, can anyone tell me what the correct answers are to the blanks? I'm just a web developer and I have to write a program which checks that the user filled in the correct answers, but I do not know the correct answers. I have some knowledge of physics and I'm guessing mp = mass of proton, mn = mass of neutron and then M = mass of deuterium nucleus, but what about the other blanks?

A: On the Wikipedia page for the semi-empirical mass formula (based on the Gamow liquid drop model of nuclei) it basically says that the mass defect $\Delta M$ is given by the difference in the masses of the unbound protons and neutrons $Zm_p+Nm_n$ minus the actual mass of the nucleus, $^A_ZM$ (the rest of the semi-empirical formula is not needed here).
The only other bit of trivia you need to know is that 1 amu of mass is the equivalent of 931.5 MeV energy.
So in order, the blanks should be typeset as $Z,m_p,N,m_n,^A_ZM,\Delta M,$ and 2.22 MeV.

redpajama_set_name: RedPajamaStackExchange


The Guardian has reported that seven years after the fall of Gaddafi and his regime in Libya, the Libyan people in Tripoli are now intimidated by a rule of militias and gangsters who control all of state institutions as well as the UN-brokered government in the capital.
"Seven years after Muammar Gaddafi was deposed and killed in the Arab spring revolution, Libya has gone full circle from dictatorship through revolution, democracy, chaos and back to a new kind of tyranny. Except this time there is not one dictator but dozens, in the form of the very militias who defeated him." The Guardian's Francesca Mannocchi reported from inside Tripoli on Saturday.
The report shows that in Tripoli there is no way for foreign journalists to move around freely and ask whoever they want to make their story saying that now Libyans are as appalled as they used to be under Gaddafi's regime.
"I can buy coffee at one of the city's ubiquitous coffee bars, but I can't talk to the customers as I have no permit. Nor can I talk to the thuggish young men, little more than boys, lolling outside. They wear expensive branded clothing and play with machine guns, clustered around their shiny black Mercedes. They know they are the true power in this city, and so does everyone else." The reporter added.
Tripoli has seen waves of fightings among militias who were vying for power and political gains. Many civilians were killed, houses were destroyed, properties seized and families displaced due to the clashes among the militias inside Tripoli.


text:
Tu i jo (títol original en anglès: An Affair to Remember) és una pel·lícula dels Estats Units de Leo McCarey, estrenada el 1957. Ha estat doblada al català.

Considerada com una de les principals pel·lícules d'amor de tots els temps per l'American Film Institute, es tracta d'un remake de la pel·lícula Love Affair dirigida divuit anys abans pel mateix Leo McCarey amb Charles Boyer i Irene Dunne.

Argument
Terry McKay, interpretada per Deborah Kerr, és una encisadora cantant de cabaret. En una travessia en paquebot, troba Nickie Ferrante (Cary Grant), faldiller d'origen italià. S'enamoren perdudament, però cadascú d'ells ja està promès. Decideixen que si el seu amor és real i fort, sobreviurà a 6 mesos de separació.

És el temps que es donen per acabar les seves relacions respectives, així com, per Nickie, guanyar-se la vida, i situar-se per tal d'esposar Terry. Queden 6 mesos més tard en el cim de l'Empire State Building.

Passen els 6 mesos. El dia convingut, Nickie és el primer a arribar dalt de la torre. Però Terry, nerviosa pel retrobament, corre entre els cotxes i és atropellada per un vehicle. Ell l'espera en va. Té les cames paralitzades, però es nega per orgull que sigui informat. El seu expromès, enamorat, s'ocupa d'ella.

Mesos més tard, la vigília de Nadal, Nickie la veu per atzar en un concert. Aconsegueix la seva adreça i la va a veure l'endemà al vespre. Allà, s'assabenta de l'accident, i comprèn per què no va arribar aquell famós dia, en el cim de l'Empire State Building. La història acaba amb aquesta frase de Terry McKay:  (Si pots pintar, puc tornar a caminar també. Tot és possible, no?).

Repartiment
 Cary Grant: Nickie Ferrante
 Deborah Kerr: Terry McKay
 Richard Denning: Kenneth Bradley
 Neva Patterson: Lois Clark
 Cathleen Nesbitt: àvia Janou
 Fortunio Bonanova: Courbet
 Charles Watts: Ned Hathaway
 Minta Durfee: una passatgera del vaixell
 Alberto Morin (no surt als crèdits): El bàrman

Al voltant de la pel·lícula
 Aquesta pel·lícula és considerada com una de les grans referències del cinema romàntic, igual com  Love Story el 1944, o Alguna cosa per recordar el 1993. Alguna cosa per recordar dirigida per Nora Ephron, amb Tom Hanks i Meg Ryan, fa diverses al·lusions a An Affair to Remember . En una escena, una dona, plorant, prova d'explicar a dos homes estupefactes per què es tracta d'una gran obra romàntica i trasbalsadora. A més, la cita entre Meg Ryan i Tom Hanks és en el cim de l'Empire State Building.
  An Affair to Remember  és també el nucli del guió de la pel·lícula de Tonie Marshall Au plus près du paradis (2002), interpretada per Catherine Deneuve.
 Una adaptació índia ha estat dirigida el 1999 amb Aamir Khan i Manisha Koirala amb el títol de MANN. És més dramàtica que la versió americana: en lloc de trobar-se paralítica, l'heroïna té amputades les dues cames.

Premis i nominacions

Nominacions
 1958: Oscar a la millor fotografia per [9]Milton R. Krasner
 1958: Oscar a la millor banda sonora per Hugo Friedhofer
 1958: Oscar a la millor cançó original per Harry Warren (música), Harold Adamson (lletra), Leo McCarey (lletra ) per la cançó "An Affair to Remember"
 1958: Oscar al millor vestuari per Charles Le Maire

Referències

Enllaços externs

Pel·lícules del 1957 doblades al català
Pel·lícules dels Estats Units del 1957
Pel·lícules dirigides per Leo McCarey
Pel·lícules de drama romàntic de la dècada del 1950
Remakes de pel·lícules

redpajama_set_name: RedPajamaWikipedia


Like an invigorating jumpstart, the cool sensation of fresh, tingly mint will awaken your spirit. Our unique blend of pure botanical extracts will refresh and revitalize your bathing routine. Natural emollients and soothing aloe vera will nourish, moisturize and gently cleanse for soft, healthy skin.


text:
Press Release: Top management changes at Thomas Miller
Mr. Fenton, who has been with Thomas Miller since 1997, is a former Chief Operating Officer of Thomas Miller P&I which manages the UK P&I Club. He has led the recent restructuring of the TT management operation and will be responsible for implementing its future business strategy. Mr Fenton commented that "The recent turmoil in financial markets has underlined the need for stability, continuity and quality of service which the Club has successfully achieved over the past 40 years".
Mr. Neagle has been involved with the TT Club's management in various roles since he joined Thomas Miller in 1981. After 10 years as Director of Underwriting, he was appointed as the Club's first Chief Executive in 1999. He has served on the Board of the Club's UK subsidiary company since June 2004.
He takes on his new role at "an exciting time in the development of Thomas Miller Investment" following its recent acquisition of a significant portfolio of business from Singer & Friedlander in the Isle of Man.
He explained: "My first priority in my new role will be to ensure that our 300 plus new clients are happy in their new environment. Once we are certain of this, we will be actively seeking further opportunities to grow this business, which is a strategic growth area for the Thomas Miller Group."
Thomas Miller Investment was originally founded to manage the funds of Thomas Miller managed mutual insurance clubs. Today, more than half its funds totaling $3.7 billion, are managed for clients unconnected with the clubs.
Thomas Miller is a boutique insurance services business managing some of the biggest and most important insurance mutuals in the marine and logistics sector, including the UK P&I Club and the TT Club. It also manages a number of professional indemnity insurance mutuals and other specialist insurance captive and agency businesses. Founded in 1884, Thomas Miller has a long tradition and reputation for service. It employs over 580 people worldwide and has offices on four continents.
www.thomasmiller.com
The TT Club is the international transport and logistics industry's leading provider of insurance and related risk management services. Established in 1968, the Club's membership comprises ship operators, ports and terminals, road, rail and airfreight operators, logistics companies and container lessors. As a mutual insurer, the Club exists to provide its policyholders with benefits, which include specialist underwriting expertise, a world-wide office network providing claims management services, and first class risk management and loss prevention advice.


Monte Montgomery (born August 11, 1966) is an American guitarist and singer-songwriter. Montgomery was named the best acoustic guitarist seven consecutive years at the South by Southwest music event in Austin, Texas. Montgomery appeared on PBS's Austin City Limits program in April 1999. Montgomery has authored music for the criminal drama Arc (2006) and music for the ABC TV series Last Man Standing starring Tim Allen. In 2004, Alvarez Guitars created the MMY1 Monte Montgomery Signature Guitar, a model based on Montgomery's 1987 Alvarez-Yairi DY62C Acoustic-Electric Guitar. See for more.


And so it was, last December the 5th, from 19 to 21 at Kahvila Taikalamppu, the #pikkujoulu (Christmas party) of the World Music School Helsinki, with the live premiere of the World Music School Helsinki Ensemble.
The event was hosted by Pedro Aibéo, Sebnem Terzioglu Jarventaus and Javier Sanchez Perez with the support of the flamenco class lead by Anna Murtola.
The event was open to everyone. The Cafe was filled with good friends and guests. See you all in 2018!