var CommonSite = new Class({

	initialize: function(options) {
		this.options = options;
		
		if (options.nav)
			this.produceMainNav();
		
		this.produceToolbar();
		
		this.produceBubbles(window.document.body);
	},
	
	produceMainNav: function() {
		var ma_nav_items = $('top_nav').getElements('div').concat($('bottom_nav').getElements('div'));
		var itr = 0; 
		var max_items = ma_nav_items.length;
		ma_nav_items.each(function(nav_item){
		
			itr++;
			var nav_text = nav_item.innerHTML;
			var nav_parent = nav_item.getParent().getProperty('id');
			var selected = false;
			var href = nav_item.getProperty('rel');
			if (href)
			{
				href = href.split(' ');
				var href_url, href_target;
				switch(href[0])
				{
					case 'internal':
						href_url = '?action='+href[1];
						href_target = '_self';
						if (this.options.nav_section == href[1])
							selected = true;
						break;
					case 'external':
						href_url = href[1];
						href_target = '_blank';
						break;
				}
				var link = new Element('a').setProperty('href',href_url).setProperty('target',href_target).injectBefore(nav_item);
				nav_item.injectInside(link);
			}
			
			if (nav_parent == 'top_nav')
			{
				nav_item.innerHTML = "";
				var add_class = ((itr == 1) ? 'first' : ((itr == max_items) ? 'last' : ''));
				nav_item.addClass(add_class);
				if (selected)
					nav_item.addClass('selected');
				
				// Make a left cap if needed
				if (itr > 1)
					var leftcap = new Element('div').setProperty('class','leftcap').injectInside(nav_item);
					
				// Label it
				var nav_label = new Element('div').setProperty('class','inner').setHTML(nav_text).injectInside(nav_item);
				
				// Make a right cap if needed
				if (itr != max_items)
					var rightcap = new Element('div').setProperty('class','rightcap').injectInside(nav_item);
				
				nav_item.addEvent('mouseover',this.energizeThis.pass(nav_item,this));
				nav_item.addEvent('mouseleave',this.drainThis.pass(nav_item,this));
			}
			else
			{
				if (itr != max_items)
					new Element('div').setProperty('class','vert').setHTML(' | ').injectAfter(link);
			}
			
		},this);
	},
	
	energizeThis: function(nav) {
		nav.addClass('over');
	},
	
	drainThis: function(nav) {
		nav.removeClass('over');
	},
	
	produceBubbles: function(bubble_container) {
		var candidates = $(bubble_container).getElements('div.bubble');
		candidates.each(function(candidate){
			var rel = candidate.getProperty('rel').split(' ');
			var arrows = rel[0];
			var dimensions = rel[1].split('x');
			
			var cap = candidate.getElement('div.title').setProperty('class','cap '+arrows);
			var flow = candidate.getElement('div.flow');
			var tail = new Element('div').addClass('tail').injectAfter(flow);
			
			// Fix title space
			
			var title_text = cap.innerHTML;
			cap.innerHTML = '';
			
			new Element('div').addClass('leftcap').injectInside(cap);
			var titlecap = new Element('div').addClass('titlecap').injectInside(cap);
			var titledata = new Element('div').addClass('titledata').setHTML(title_text).injectInside(titlecap);
			new Element('div').addClass('rightcap').injectInside(cap);
			
			// Fix main data space
			var mode = 'normal';
			if (cap.getElement('div.leftcap').getStyle('backgroundImage').indexOf('/white') != -1)
				mode = 'white';
			flow.setStyle('backgroundImage',"url('bubblemaker.php?width="+dimensions[0]+"&mode="+mode+"')");
			
			// Fix tail space
			
			var lefttail = new Element('div').addClass('lefttail').injectInside(tail);
			var maintail = new Element('div').addClass('maintail').injectInside(tail);
			var righttail = new Element('div').addClass('righttail').injectInside(tail);
			
			// Set widths
			
			candidate.setStyle('width',dimensions[0]+'px');
			var titlecap_width = dimensions[0] - (cap.getElement('div.leftcap').getSize().size.x + cap.getElement('div.rightcap').getSize().size.x);
			titledata.setStyle('width',titlecap_width+'px');
			
			/*var mainflow_width = dimensions[0] - (leftflow.getSize().size.x + rightflow.getSize().size.x);
			mainflow.setStyle('width',mainflow_width+'px');*/
			
			var maintail_width = dimensions[0] - (lefttail.getSize().size.x + righttail.getSize().size.x);
			maintail.setStyle('width',maintail_width+'px');
			
			// Set heights
			
			if (dimensions[1] != 'auto')
			{
				var new_height = dimensions[1] - (cap.getSize().size.y - tail.getSize().size.y);
				flow.setStyle('height',new_height+'px');
			}
			
			//this.produceBubbles(flow);
			
		},this);
	},
	
	produceToolbar: function() {
		var toolbar_items = $(window.document.body).getElements('div.highlight .toolbar_item');
		if ($(window.document.body).getElement('div.highlight'))
			var toolbar_action = $(window.document.body).getElement('div.highlight').getProperty('rel');
		
		toolbar_items.each(function(toolbar_item, i){
			
			var tab_name = toolbar_item.getProperty('id');
			if (tab_name != null)
			{
				var goto_url = '?action='+toolbar_action+((tab_name && tab_name.length) ? '&tab='+tab_name : '');
				var link = new Element('a').setProperty('href',goto_url);
				if (toolbar_item.tagName == "SPAN")
				{
					link.setHTML(toolbar_item.innerHTML).injectInside(toolbar_item.setHTML(''));
				}
				else
				{
					link.injectBefore(toolbar_item);
					toolbar_item.injectInside(link);
				}
			}
			
		}, this);
	}

});