function $get(key,url){  
    if(arguments.length < 2) url =location.href;  
    if(arguments.length > 0 && key != ""){  
        if(key == "#"){  
            var regex = new RegExp("[#]([^$]*)");  
        } else if(key == "?"){  
            var regex = new RegExp("[?]([^#$]*)");  
        } else {  
            var regex = new RegExp("[?&]"+key+"=([^&#]*)");  
        }  
        var results = regex.exec(url);  
        return (results == null )? "" : results[1];  
    } else {  
        url = url.split("?");  
        var results = {};  
            if(url.length > 1){  
                url = url[1].split("#");  
                if(url.length > 1) results["hash"] = url[1];  
                url[0].split("&").each(function(item,index){  
                    item = item.split("=");  
                    results[item[0]] = item[1];  
                });  
            }  
        return results;  
    }  
}

var crossFadeTabs = function( selector ) {
	var list 			= $( selector );

	var heights 	= {};
	var labels 		= $$( "#"+selector+" dt" );
	var panes 		= $$( "#"+selector+" dd" );
	var tabHeight = labels[0].getCoordinates().height;
	
	var fx 				= new Fx.Elements( panes, { duration: 500 } );
	
	var get = $get();

	panes.each( function( pane, i ) {
		pane.addClass( 'pane' );
		var o = {};

		heights[i] = pane.getCoordinates().height;
		if(heights[i] > 500) heights[i] = 670;
		if( i != 0 ) {
			o[i] = { opacity : 0 };
			fx.set( o );
			pane.setStyle( 'visibility', 'hidden' );
		} else {
			list.setStyle( 'height', heights[i] + tabHeight );
			pane.setStyle( 'height', heights[i] );
		}
	});

	labels.each( function( label, i ) {
		label.addClass( 'label' );		
		label.addEvent( "click", function( event ) {
			label.addClass( 'selected' );
			var o = {};
			labels.each( function( oldLabel, j ) {
				if( i != j && oldLabel.hasClass( 'selected' ) ) {
					oldLabel.removeClass( 'selected' );
					o[j] = { opacity : 0 };
					o[i] = { opacity : 1, height : [ heights[j], heights[i] ] };
					if (heights[j] < heights[i]) {
						list.setStyle( 'height', heights[i] + tabHeight );
						fx.start( o );
					} else {
						fx.start( o ).chain(function() {
							list.setStyle( 'height', heights[i] + tabHeight );});
					}				
				}
			});
		});
		if( i == 0 && get.selected == null ) { 
			label.addClass( 'selected' );
		}
		else if(get.selected != null){
			if(label.getText().contains(get.selected)){
				label.addClass( 'selected' );
				
				panes[0].setStyle( 'visibility', 'hidden' );
				panes[i].setStyles({visibility: 'visible', opacity: '1', height: heights[i]});
				list.setStyle( 'height', heights[i] + tabHeight );
			}
			else if(labels.length - 1 == i){
				labels[0].addClass( 'selected' );
			}
		}
	});

};

window.addEvent('domready', function(){  	
	crossFadeTabs('roi_tabs');
});
