/**
 * syncHeight - jQuery plugin to automagically Snyc the heights of columns
 * Made to seemlessly work with the CCS-Framework YAML (yaml.de)
 * @requires jQuery v1.0.3
 *
 * http://blog.ginader.de/dev/syncheight/
 *
 * Copyright (c) 2007-2009 
 * Dirk Ginader (ginader.de)
 * Dirk Jesse (yaml.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Version: 1.2
 *
 * Usage:
   $(window).load(function(){
    $('p').syncHeight();
  });
 */

(function($) {
    var getHeightProperty = function() {
    var browser_id = 0;
    var property = [
      // To avoid content overflow in synchronised boxes on font scaling, we 
      // use 'min-height' property for modern browsers ...
      ['min-height','0px'],
      // and 'height' property for Internet Explorer.
      ['height','1%']
    ];

    // check for IE6 ...
    if($.browser.msie && $.browser.version < 7){
      browser_id = 1;
    }
        
        return { 'name': property[browser_id][0], 
                 'autoheightVal': property[browser_id][1] };
    };
    
    $.getSyncedHeight = function(selector) {
        var max = 0;
        var heightProperty = getHeightProperty();
    // get maximum element height ...
    $(selector).each(function() {
      // fallback to auto height before height check ...
      $(this).css(heightProperty.name, heightProperty.autoheightVal);
      var val = $(this).height();
      if(val > max){
         max = val;
      }
    });
        return max;
    };
    
  $.fn.syncHeight = function(config) {
    var defaults = {
      updateOnResize: false,  // re-sync element heights after a browser resize event (useful in flexible layouts)
            height: false
    };
    var options = $.extend(defaults, config);
    
    var e = this;
    
    var max = 0;
        var heightPropertyName = getHeightProperty().name;
    
        if(typeof(options.height) === "number") {
            max = options.height;
        } else {
            max = $.getSyncedHeight(this);
        }
    // set synchronized element height ...
     $(this).each(function() {
        $(this).css(heightPropertyName, max+'px');
    });
    
    // optional sync refresh on resize event ...
    if (options.updateOnResize === true) {
      $(window).resize(function(){ 
        $(e).syncHeight();
      });
    }
    return this;
  };  
})(jQuery);
