/**
 * A3non Sandbox - UI.ContentMenu
 * 
 * @author Andi Dittrich <andi.dittrich@a3non.org>
 * @url http://www.a3non.org
 * @license Creative Commons BY-NC, Creative Commons Namensnennung-Keine kommerzielle Nutzung 3.0 Deutschland Lizenz, 
 * @license http://creativecommons.org/licenses/by-nc/3.0/de/
 * @version 1.0
 */
Sandbox.UI.ContentMenu = new Class({
	source: null,
	contentNaviReferences: null,

	initialize: function(source){
		this.source = $(source);
		
		// create tmp array
		this.contentNaviReferences = new Array();
		
		// get all headings
		$('contentarea_center').getElements('h2, h3').each(function(el, index){
			this.contentNaviReferences.push(el);
		}.bind(this));
		
		// sort by position
		this.contentNaviReferences.sort(function(a, b){
			return (a.getPosition().y) - (b.getPosition().y);
		});
	},
	
	createNavigation: function(){
		if (this.contentNaviReferences.length==0){
			return null;
		}
		
		var contentNaviNode = new Element('ul');
		
		var oldLevel = 2;
		var startNode = contentNaviNode;
		this.contentNaviReferences.each(function(el, index){
			// calculate level
			var level = el.get('tag').substring(1,2).toInt();
			
			// calculate difference				
			var levelDiff = level-oldLevel;
			
			// positive : new level ist bigger
			if (levelDiff > 0){
				// walk through each level (prevent jumps)
				for (var i=0;i<levelDiff;i++){
					var sub = startNode.getElement('li');
					// if node exists, assign
					if (sub && sub.getElement('ul')){
						startNode = sub.getElement('ul');
					}else{
						var tmp = new Element('ul');
						startNode.grab(tmp);
						startNode = tmp;
					}
				}					
			}else if (levelDiff<0){
				for (var i=levelDiff;i<0;i++){
					startNode = startNode.getParent();
				}
			}
			
			// assign new level
			oldLevel = level;
			
			// grab item
			var item = new Element('li', {
				text: el.get('text')
			});
			startNode.grab(item);
			item.addEvent('click', function(){
				new Fx.Scroll(window).toElement(el);
			});
			item.addEvent('mouseover', function(){
				item.addClass('hover');
			});
			item.addEvent('mouseout', function(){
				item.removeClass('hover');
			});
		});

		return contentNaviNode;
	}
	
});

