UKTV.ExpandingBox = new function() {	
	this.NS = "UKTV.ExpandingBox";
	var _self = this;
	var YD = YAHOO.util.Dom;
	var YE = YAHOO.util.Event;
	var YS = YAHOO.util.Selector;
	
	var _container;
	var _link;
	var _content;
	var _expanded = false;
	var _tween_speed = 0.5;	
	
	var _hideContent = function() {
		_expanded = false;		
		var _removeElement = function() {
			YD.setStyle(_content, 'display', 'none');
			YD.setStyle(_content, 'height', 'auto');
		}

		var tween_conf = { 'height': { 'to': 0 }};
		var tween = new YAHOO.util.Anim(_content, tween_conf, _tween_speed, YAHOO.util.Easing.easeOut);
		tween.onComplete.subscribe(_removeElement);		
		tween.animate();
	}
	
	var _showContent = function() {
		var height = YAHOO.util.Dom.getStyle(_content,'height');
		YD.setStyle(_content, 'display', 'block');

		if(height==='auto'){
			curHeight = _content.offsetHeight;
		} else {
			curHeight = Math.max(parseInt(height),_content.offsetHeight);	        
		}
		
		var target_height = parseInt(curHeight);				

		YD.setStyle(_content, 'height', '1px');
		YD.setStyle(_content, 'overflow', 'hidden');
		_expanded = true;
		var tween_conf = { 'height': { 'from': 0, 'to': target_height }};
		var tween = new YAHOO.util.Anim(_content, tween_conf, _tween_speed, YAHOO.util.Easing.easeOut);
		tween.animate();
	}

	var _toggleContent = function(e) {
        var ev = YE.getEvent(e);
        var node = YE.getTarget(ev);
        YE.stopEvent(ev);
		
		if(_expanded) {
			_hideContent();
		} else {
			_showContent();
		}
	}

	this.init = function() {
		_container = YS.query('div.expand-box-container', false, true);
		_link = YS.query('a.expand-box-toggle', _container, true);
		_content = YS.query('div.expand-box-container .expand-box-content', false, true);
		YD.setStyle(_content, 'height', 'auto');
		
		if(_container && _link && _content) {
			if(YD.getStyle(_content, 'display') == 'none') {
				_expanded = false;
			}

			YE.addListener(_link, 'click', _toggleContent);
		}
	}	

	UKTV.loader.registerObj(this);
};