(function() {
	
	// import
	var Class = benignware.core.Class;
	var Element = Class.require("benignware.core.Element");
	var Event = Class.require("benignware.events.Event");
	var Component = Class.require("benignware.core.Component");
	var DOM = Class.require("benignware.utils.DOM");
	var StringUtils = Class.require("benignware.utils.StringUtils");
	
	var Tween = Class.require("benignware.transitions.Tween");
	var Regular = Class.require("benignware.transitions.easing.Regular");

	// params
	var duration = 0.75;
	var easeFunction = Regular.easeInOut;
	
	
	// elements
	var moreButton;
	var moreLabel;
	var details;
	var detailsContainer;
	var detailsTween;
	var isShowing = false;
	// init elements
	var dom = DOM.getInstance();
	dom.addEventListener('DOMContentLoaded', function(event){
		moreButton = document.getElementById('content-details-button');
		details = document.getElementById('content-details');
		detailsContainer = document.getElementById('content-details-container');
		if (moreButton && details && detailsContainer) {
			detailsTween = new Tween();
			detailsTween.duration = duration;
			detailsTween.easeFunction = easeFunction;
			detailsTween.addEventListener(Tween.MOTION_CHANGE, motionChangeHandler, false);
			moreButton.onmousedown = function(event) {
				event = Event.getEvent(event);
				if (!isShowing) {
					isShowing = true;
					moreButton.className = "content-details-hide";
					detailsTween.forward();
				} else {
					details.blur();
					isShowing = false;
					moreButton.className = "content-details-show";
					detailsTween.reverse();
				}
				event.preventDefault();
				return false;
			}
		}
	});
	
	function motionChangeHandler(event) {
		var p = event.target.getPosition();
		details.style.display = "block";
		if (p == 1) {
			detailsContainer.style.overflow = "visible";
			detailsContainer.style.position = "";
			detailsContainer.style.height = "auto";
			details.style.position = "";
		} else {
			y = -details.offsetHeight + p * details.offsetHeight;
			detailsContainer.style.position = "relative";
			details.style.position = "absolute";
			detailsContainer.style.overflow = "hidden";
			details.style.top = y + "px";
			detailsContainer.style.height = (y + details.offsetHeight) + "px";
		}
		details.style.opacity = p;
	}
})();
