/*
 * JavaScript Abbreviation
 * Matt Ryall
 * http://www.mattryall.net/demo/abbreviation/
 * 
 * Licensed under Creative Commons Attribution 3.0.
 * http://creativecommons.org/licenses/by/3.0/
 */
jQuery.fn.abbreviateUntil = function (condition) {
  $(this).each(function () {
    var children = $(this).children();

    // remove any previous abbreviations
    $(this).find(".abbreviated").each(function () {
      $(this).text($(this).attr("title"));
      $(this).removeClass("abbreviated");
    });
    
    var current = 0;
    while (current < children.length && !condition.call(this)) {
      var $child = $(children[current]);
      if ($child.text() == "\u2026") {
        current++;
        continue;
      }
      if (!$child.hasClass("abbreviated")) {
        $child.attr("title", $child.text());
        $child.addClass("abbreviated");
      }
      $child.text($child.text().replace(/[^\u2026]\u2026?$/, "\u2026"));
    }
  });
  return this;
};

jQuery(function ($) {
  // fixed width example
  var fixedWidth = $(".fixed").width();
  $(".fixed ul").abbreviateUntil(function () {
    return $(this).width() <= fixedWidth;
  })
  
  // variable width example
  $("#update").click(function () {
    var variableWidth = $("#width").val();
    $(".variable").css("width", variableWidth + "px");
    $(".variable ul").abbreviateUntil(function () {
      return $(this).width() <= variableWidth;
    });
  });
  $("#update").click(); // initialise

  // dynamic draggable width example
  function adjustDynamicWidth() {
    var dynamicWidth = $(".dynamic").width();
    $(".dynamic ul").abbreviateUntil(function () {
      return $(this).width() <= dynamicWidth;
    });
  }
  var widthAdjust = null;
	var dragStart, startWidth;
	$(document).mousemove(function (e) {
		if (widthAdjust != null) {
		  var newWidth = startWidth + e.clientX - dragStart;
			widthAdjust.css("width", Math.max(Math.min(newWidth, 1000), 300) + "px");
      adjustDynamicWidth();
		}
	});
	$(document).mouseup(function () {
		widthAdjust = null;
	});
  $(".dynamic .dragger").mousedown(function (e) {
		widthAdjust = $(this).closest(".dynamic");
		dragStart = e.clientX;
		startWidth = widthAdjust.width();
		e.preventDefault();
	});
	adjustDynamicWidth(); // initialise
});
