/* Menu Preview namespace */
mp = {};
mp.current_preview = null;
mp.effect = 'blind';

mp.show_preview = function(){
	var selected_preview = getFirstElementByTagAndClassName("div", "left_menu_preview_right_preview_selected");
	if(selected_preview == null || selected_preview == mp.current_preview){
		return;
	}
	// hide the current menu
	mp.hide_preview();
	toggle(selected_preview, mp.effect, {'queue':'end', 'to':1.0, 'duration':1.0, 'direction':'bottom-left'});
	mp.current_preview = selected_preview;
	return false;	
}

mp.hide_preview = function(){
	if(mp.current_preview != null){
		var preview = mp.current_preview;
		mp.current_preview = null;
		hideElement(preview);
		//toggle(preview, mp.effect, {'queue':'end','direction':'bottom-left'});		
	}
	return false;
}

mp.resize_all = function(){
	
	left_menus = getElementsByTagAndClassName('*','cms_left_preview_menu_left_menu');
	right_previews = getElementsByTagAndClassName('*', 'cms_left_preview_menu_right_preview');
	forEach(zip(left_menus, right_previews), function(menu_tuple){
		left_menu = menu_tuple[0];
		right_preview = menu_tuple[1];
		
		widget_pos = getElementPosition(getFirstParentByTagAndClassName(right_preview, null, "cms_left_preview_menu"));
		widget_dim = getElementDimensions(getFirstParentByTagAndClassName(right_preview, null, "cms_left_preview_menu"));
		
		lm_dim = getElementDimensions(left_menu);
		lm_pos = getElementPosition(left_menu);
		rp_dim = getElementDimensions(right_preview);
		rp_pos = getElementPosition(right_preview);
		
		if(lm_dim.h > rp_dim.h){
			rp_dim.h = lm_dim.h;
		 
		}
		
		setElementDimensions(right_preview, rp_dim);
		
		// Set each elements calculated dimension
		preview_elems = getElementsByTagAndClassName('div', 'left_menu_preview_right_preview_selected', right_preview);
		forEach(preview_elems, function(elem){
			dim = getElementDimensions(elem);
			dim.w = rp_dim.w;
			
			// height difference
			h_diff = dim.h - rp_dim.h;
			
			// fill the table on the right and overlap header if necessary
			if(h_diff <= 0){
				dim.h = rp_dim.h;
			}
			
			setElementDimensions(elem, dim);
			content_elem = getFirstElementByTagAndClassName('div', 'left_menu_preview_right_preview_content', elem);
			setElementDimensions(content_elem, dim);			
		});
		
		// Set each elements calculated dimension
		preview_elems = getElementsByTagAndClassName('div', 'left_menu_preview_right_preview_not_selected', right_preview);
		forEach(preview_elems, function(elem){
			dim = getElementDimensions(elem);
			dim.w = rp_dim.w;
			
			// height difference
			h_diff = dim.h - rp_dim.h;
			
			// fill the table on the right and overlap header if necessary
			if(h_diff <= 0){
				dim.h = rp_dim.h;
			}
			
			setElementDimensions(elem, dim);
			var content_elem = getFirstElementByTagAndClassName('div', 'left_menu_preview_right_preview_content', elem);
			setElementDimensions(content_elem, dim);			
		});
		
		// Set each elements calculated position
		var preview_elems = getElementsByTagAndClassName('div', 'left_menu_preview_right_preview_selected', right_preview);
		forEach(preview_elems, function(elem){
			// reset the element to be positioned correctly
			var pos = {y:rp_pos.y, x:rp_pos.x};
			dim = getElementDimensions(elem);
			// height difference
			h_diff = dim.h - rp_dim.h;
			
			if(h_diff > 0){
				pos.y = pos.y - h_diff;
			}
			
			if(pos.y < 10){
				pos.y = 10;
			}
			setElementPosition(elem, pos);
			
			if(widget_pos.y + widget_dim.h < pos.y + dim.h){
                widget_dim.h += (pos.y + dim.h - (widget_pos.y + widget_dim.h))
                setElementDimensions(getFirstParentByTagAndClassName(right_preview, null, "cms_left_preview_menu"), widget_dim);
                signal('main_container', 'contentresize'); 
            }   	
		});
		
		// Set each elements calculated position
		var preview_elems = getElementsByTagAndClassName('div', 'left_menu_preview_right_preview_not_selected', right_preview);
		forEach(preview_elems, function(elem){
			// reset the element to be positioned correctly
			var pos = {y:rp_pos.y, x:rp_pos.x};
			dim = getElementDimensions(elem);
			// Height difference
			h_diff = dim.h - rp_dim.h;
			
			if(h_diff > 0){
				pos.y = pos.y - h_diff;
			}
			
			if(pos.y < 10){
				pos.y = 10;
			}
			setElementPosition(elem, pos);	
			
			if(widget_pos.y + widget_dim.h < pos.y + dim.h){
				widget_dim.h += (pos.y + dim.h - (widget_pos.y + widget_dim.h))
				setElementDimensions(getFirstParentByTagAndClassName(right_preview, null, "cms_left_preview_menu"), widget_dim);
				signal('main_container', 'contentresize'); 
			}			
		});
	});
}

mp.set_opacity = function(){
	parent = getFirstElementByTagAndClassName('*', 'cms_left_preview_menu_right_preview');
	previews = getElementsByTagAndClassName('div', null, parent);
	forEach(previews, function(elem){
		setOpacity(elem, 0.95);
	});
}

mp.connect_items = function(){
	left_menu = getFirstElementByTagAndClassName('*', 'cms_left_preview_menu_left_menu');
	connect(window, 'onresize', mp.resize_all);
	
	menu_items = getElementsByTagAndClassName('*', 'left_menu_preview_button', left_menu);
	forEach(menu_items, function(menu_item){
		connect(menu_item, 'onclick', function(e){
			menu_anchor = e.target();
			menu_item = getFirstParentByTagAndClassName(menu_anchor, 'div', null);
			input = getFirstElementByTagAndClassName('input', null, menu_item);
			preview_item = getElement(input.value);
			selected_item = getFirstElementByTagAndClassName('*', 'left_menu_preview_left_menu_selected');
			swapElementClass(selected_item, 'left_menu_preview_left_menu_selected', 'left_menu_preview_left_menu_not_selected');
			swapElementClass(menu_item, 'left_menu_preview_left_menu_not_selected', 'left_menu_preview_left_menu_selected');
			selected_preview = getFirstElementByTagAndClassName('*', 'left_menu_preview_right_preview_selected');
			swapElementClass(selected_preview, 'left_menu_preview_right_preview_selected', 'left_menu_preview_right_preview_not_selected');
			swapElementClass(preview_item, 'left_menu_preview_right_preview_not_selected', 'left_menu_preview_right_preview_selected');
			mp.show_preview();
		});
	});
	var close_buttons = getElementsByTagAndClassName('*', 'close_menu_button');
	forEach(close_buttons, function(button){
		connect(button, 'onclick', mp.hide_preview);
	});
}

addLoadEvent(function(){
	// Initialize the views
	mp.resize_all();
	mp.show_preview();
	
	// Connect the menu items to their preview data
	mp.connect_items();
});

