var ElementMaxHeight = function() {


  this.initialize.apply(this, arguments);


}





ElementMaxHeight.prototype = {


  initialize: function(className) {


    this.elements = document.getElementsByClassName(className || 'maxheight');    


    this.textElement = document.createElement('span');


    this.textElement.appendChild(document.createTextNode('A'));


    this.textElement.style.display = 'block';


    this.textElement.style.position = 'absolute';


    this.textElement.style.fontSize = '1em';


    this.textElement.style.top = '-1000px';


    this.textElement.style.left = '-1000px';


    document.body.appendChild(this.textElement);


    this.textElementHeight = document.getDimensions(this.textElement).height;


    var __object = this;


    var __checkFontSize = this.checkFontSize;


    this.checkFontSizeInterval = window.setInterval(function() {return __checkFontSize.apply(__object)}, 500);





    this.expand();





    // Refresh elements height onResize event


    var __expand = this.expand;


    if (window.addEventListener) {


      window.addEventListener('resize', function(event) {return __expand.apply(__object, [( event || window.event)])}, false);


    } else if (window.attachEvent) {


      window.attachEvent('onresize', function(event) {return __expand.apply(__object, [( event || window.event)])});


    }


  },





  expand: function() {


    this.reset();


  	for (var i = 0; i < this.elements.length; i++) {  	


      this.elements[i].style.height = document.getDimensions(this.elements[i].parentNode).height + 'px';


  	}


  },





  reset: function() {


    for (var i = 0; i < this.elements.length; i++) {    


      this.elements[i].style.height = 'auto';


    }


  },





  checkFontSize: function() {


  	var height = document.getDimensions(this.textElement).height;


  	if(this.textElementHeight != height) {


  		this.textElementHeight = height;


  		this.expand();


  	}


  }  


}








if (!!document.evaluate) {


  document._getElementsByXPath = function(expression, parentElement) {


    var results = [];


    var query = document.evaluate(expression, parentElement || document,


      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);


    for (var i = 0, length = query.snapshotLength; i < length; i++)


      results.push(query.snapshotItem(i));


    return results;


  }


}





document.getElementsByClassName = function(className, parentElement) {


  if (!!document.evaluate) {


    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";


    return document._getElementsByXPath(q, parentElement);


  } else {


    var children = (parentElement || document.body).getElementsByTagName('*');


    var elements = [], child;


    for (var i = 0, length = children.length; i < length; i++) {


      child = children[i];


      if (child.className.length != 0 &&


          (child.className == className ||


           child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))) {      


        elements.push(child);


      }


    }


    return elements;


  }


}





document.getDimensions = function (element) {


  var display = element.style.display;


  if (display != 'none' && display != null) { // Safari bug


    return {width: element.offsetWidth, height: element.offsetHeight};


  }





  return {width: originalWidth, height: originalHeight};


}
