var op_tabbed_content = (function(){
	return{
		// build an array of all of the tabs on the page to setup event listeners
		init: function(){
			var elements = document.getElementsByTagName("div");
			var tabs = [];
		    for(var i = 0; i < elements.length;i++){
	            if(elements[i].className == 'op_tabbed_tabs'){
	                    tabs.push(elements[i]);
	            }
	        }
			for(var h=0; h < tabs.length; h++){
				var elems = tabs[h].getElementsByTagName('li');
				for(var i=0; i < elems.length; i++){
					OP.observe(elems[i],'click',op_tabbed_content.switchTab);
				}				
			}
		},
		
		switchTab: function(){
			// get event target.  this won't have an id in IE
			var tmp = this.id == undefined ? event.srcElement : this;
			var newId = tmp.className.split('-')[1];
			
			// Handling whitespace trick taken from jQuery
			var matched = [], current = tmp['parentNode'];
			while ( current && current != document ) {
				if ( current.nodeType == 1 )
					matched.push( current );
				current = current['parentNode'];
			}
			tmp = matched;

			// get widget_id from event target element
			var widget_id = tmp[1].id.split('-')[1];

			// Handle datasets.  Show active by hiding all not selected with css class "hide"
			var elems = document.getElementById('op_tabbed_datasets-'+widget_id).getElementsByTagName('div');
			for(var i=0; i < elems.length; i++){
				var thisId = elems[i].className.split(' ')[0].split('-')[1]; // get id dataset[i]
				var classbase = 'tabbed_dataset-'+thisId;
				elems[i].className = thisId == newId ? classbase : classbase+ ' hide';
			}
			
			// Handle tabs.  Show selected tab by adding css class "selected"
			var tab_elems = document.getElementById('op_tabbed_tabs-'+widget_id).getElementsByTagName('li');
			for(var j=0; j < tab_elems.length; j++){
				var thisId = tab_elems[j].className.split(' ')[0].split('-')[1]; // get id of tab[j]
				var classbase = 'tabbed_tab-'+thisId;
				tab_elems[j].className = thisId != newId ? classbase : classbase+ ' selected';
			}
			
			
		}
	}
})();

OP.addLoadProcess(op_tabbed_content.init);