NB.ExpandableContent = function initializeExpandableContent()
{
    // Imports
	var Dom = YAHOO.util.Dom;
	var Event = YAHOO.util.Event;
	var Anim = YAHOO.util.Anim;
	
	
	var toggleAnim = null;
	var productsAnim = null;
	
	var expandables = Dom.getElementsByClassName("expandable");
	for(var i = 0; i < expandables.length; i++)
	{
		var eventArgs = getEventArgs(expandables[i]);		
		Event.on(eventArgs.expander, "click", onToggle, eventArgs); 
	}
	
	function getEventArgs(expandableItem)
	{
		var expander = Dom.getElementsByClassName("expander", "", expandableItem)[0];
        var productsThumbsEls = Dom.getElementsByClassName("products-thumbnails", "",expandableItem);
        var productsThumbs = null;
        if(productsThumbsEls.length > 0)
        {
            productsThumbs = productsThumbsEls[0]; 
        }
        var expandableContent = Dom.getElementsByClassName("expandable-content", "", expandableItem)[0];
        
        return {
            expander : expander,
            content : expandableContent,
            productsThumbs : productsThumbs
        };
	}
	
	function onToggle(evt, eventArgs)
	{
		try
		{
		  evt = Event.getEvent();
		  Event.stopEvent(evt);
		}
		catch(e)
		{
			
		}
		
		Dom.removeClass(eventArgs.content.parentNode, "expanded");
		
		var isVisible = !(Dom.getStyle(eventArgs.content, "display") == "none");
		
		eventArgs.content.style.display = "block";
		
		var endHeight = Dom.getFirstChild(eventArgs.content).offsetHeight;
		
		
		var speed = 1000;
		var time = endHeight / speed;
		
		if(productsAnim && productsAnim.isAnimated())
		{
			productsAnim.stop();
		}
		
		if(isVisible)
		{
			Dom.replaceClass(eventArgs.expander, "expanded", "collapsed");
			
			if(eventArgs.productsThumbs)
            {
                
				var thumbs = eventArgs.productsThumbs;
				var endHeight = thumbs.firstChild.offsetHeight;
                productsAnim = new Anim(thumbs, {bottom: {to: 25}, height: {to: endHeight}}, .2, YAHOO.util.Easing.easeOut);
                productsAnim.onComplete.subscribe(function() {
                    if(thumbs.style.bottom != "25px")
                       return;
					
					thumbs.style.zIndex = 20;
                    productsAnim = new Anim(thumbs, {bottom: {to: 0}}, .5, YAHOO.util.Easing.bounceOut);
                    productsAnim.animate();
                });
                productsAnim.animate();
            }
			
            toggleAnim = new Anim(eventArgs.content, {height: {to: 0}}, time, YAHOO.util.Easing.easeOut);
			toggleAnim.onComplete.subscribe(function() {
				eventArgs.content.style.display = "none";
				eventArgs.content.style.height = "auto";
			});
			toggleAnim.animate();			
		}
		else
		{
			eventArgs.content.style.height = "0px";
			Dom.replaceClass(eventArgs.expander, "collapsed", "expanded");
			
			if(eventArgs.productsThumbs)
			{
				var thumbs = eventArgs.productsThumbs;
				productsAnim = new Anim(thumbs, {bottom: {to: 25}}, .2, YAHOO.util.Easing.easeOut);
				productsAnim.onComplete.subscribe(function(e) {
					if(thumbs.style.bottom != "25px")
					   return;
					   
					thumbs.style.zIndex = 1;
					productsAnim = new Anim(thumbs, {bottom: {to: 0}, height: {to: 0}}, .5, YAHOO.util.Easing.bounceOut);
					productsAnim.animate();
				});
				productsAnim.animate();
			}
			
			
			toggleAnim = new Anim(eventArgs.content, {height: {to: endHeight}}, time, YAHOO.util.Easing.easeOut);
            toggleAnim.onComplete.subscribe(function() {
                eventArgs.content.style.height = "auto";
            });
            toggleAnim.animate();			
		}
	}
	
	
	return {
		toggleItem : function(id) {
			var evtArgs = getEventArgs(Dom.get(id));
            onToggle(null, evtArgs);
			var y = Dom.getY(evtArgs.content);
			var scrollY = Dom.getDocumentScrollTop();
			window.scrollTo(0, y);
		}
	};
	
}();
