function buildConsoleObject(){	
	if (!window.console ){
	    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
	    window.console = {};
	    for (var i = 0; i < names.length; ++i){
			window.console[names[i]] = function() {};
		}
		names = null;
	}else if( Browser.Engine.webkit ){
	    var names = [ "debug", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
	    for (var i = 0; i < names.length; ++i){
			window.console[names[i]] = function() {};
		}
		names = null;		
	}
}

buildConsoleObject();

Element.implement({
	getValueFromClassName: function( key ){

		var aClassName = this.get( "class" );
		if( !aClassName ) return;
		
		var classNames = aClassName.split( " " );

		var result = null;

		classNames.each( function( className ){
			if( className.indexOf( key ) == 0 ) result = className.split("-")[1];
		});

		return result;

	}
});

extrajudicial = {
	
	ui: {},
	
	pageScroll: null,
	
	accordions: new Hash(),
	activeAccordion: null,
	
	init: function(){
		extrajudicial.initAccordions();
		
		var newsHeaders = $$( ".newsHeader" );
		var newsItemContents = $$( ".newsItemContent" );
		newsHeaders.each( function( aNewsHeader, anIndex ){
			aNewsHeader.addEvent( "click", extrajudicial.onNewsHeaderClicked.bindWithEvent( this, newsItemContents[ anIndex ] ) );
		});
		
		Cufon.replace( "h2" );
		Cufon.replace( "h4.date" );
		Cufon.replace( ".accordionToggle a", { hover: true } );
		Cufon.replace( ".button a", { hover: true } );
		Cufon.replace( ".nav a", { hover: true } );

		if( Browser.trident ) Cufon.now();
		var pageLinks = $$(".pageLink");
//		console.log( pageLinks.length );
		if( pageLinks.length ){
			pageLinks.each( function( anElement ){
//				console.log( anElement.get( "href" ) );
				anElement.addEvent( "click", extrajudicial.onPageLinkClicked.bindWithEvent( this, anElement.get( "href" ) ) );
			});
		}
		
		var emailLinks = $$( ".emailLink a" );
		if( !emailLinks.length ) return;
		emailLinks.each( function( anElement ){
			anElement.set( "text", extrajudicial.Rot13.convert( anElement.get( "text" ) ) );
			anElement.set( "href", extrajudicial.Rot13.convert( anElement.get( "href" ) ) );
		});

	},
	
	onNewsHeaderClicked: function( e, aNewsItemContent ){
		if( e && e.stop ){
			e.stop();
		}else if( e ){
			e.returnValue = false;
		}
		aNewsItemContent.toggleClass( "hidden" );

	},
	
	Rot13: {
		convert : function( aString ){
	    	return aString.replace( /[a-zA-Z]/g, function( c ){
	        	return String.fromCharCode( ( c <= "Z" ? 90 : 122 ) >= ( c = c.charCodeAt(0) + 13) ? c : c - 26 );
	    	});
		}
	},
	
	onPageLinkClicked: function( e, anchorName ){
		
		if( e && e.stop ){
			e.stop();
		}else if( e ){
			e.returnValue = false;
		}
		
		var target = $$( "a[name~='" + anchorName.substring( 1, anchorName.length )+ "']" )[0];
		if( !extrajudicial.pageScroll ) extrajudicial.pageScroll = new Fx.Scroll( document );
		extrajudicial.pageScroll.toElement( target );

	},
	
	initAccordions: function(){

		var accordions = $$( ".accordion" );

		accordions.each( function( accordionElement, anIndex ){

			var toggles = accordionElement.getElements( ".accordionToggle" );
			var targets = accordionElement.getElements( ".accordionTarget" );
			var initStateClass = accordionElement.getValueFromClassName( "initState" );
			var initState = ( initStateClass )? Number( initStateClass ) : -1;

			targets.each( function( anElement, anIndex ){
				toggles[anIndex].addEvent( "click", Event.stop );
			}, this );

			var anAccordion = new Fx.Accordion( toggles, targets, {

				alwaysHide: true,
				display: initState,
				duration: 200,
				
				// onBackground: function ( toggler, element ){
				// 
				// 	if( toggler.getElement(".link") && extrajudicial.activeAccordion && extrajudicial.activeAccordion.getElement( ".link" ) ){
				// 		if( toggler == extrajudicial.activeAccordion ){
				// 			console.log( "*\tonBackground", toggler.getElement(".link").get("text"), extrajudicial.activeAccordion.getElement(".link").get("text") );
				// 		}else{
				// 			console.log( "onBackground", toggler.getElement(".link").get("text"), extrajudicial.activeAccordion.getElement(".link").get("text") );
				// 		}
				// 	}
				// 		
				// },

				onActive: function ( toggler, element ){
					
					//if( extrajudicial.activeAccordion && toggler.getElement(".link") ) console.log( "\t\tonActive", toggler.getElement(".link").get("text"), extrajudicial.activeAccordion.getElement(".link").get("text") );

					var indicator = toggler.getElement( ".indicator" );
					if( indicator ) indicator.set( "text", "-" );
					
					toggler.removeClass( "inactive" );
					toggler.addClass( "active" );
					
					if( extrajudicial.activeAccordion ){
						
						var indicator = extrajudicial.activeAccordion.getElement( ".indicator" );
						if( indicator ) indicator.set( "text", "+" );
					
						extrajudicial.activeAccordion.removeClass( "active" );
						extrajudicial.activeAccordion.addClass( "inactive" );
						
						var externalNav = extrajudicial.activeAccordion.retrieve( "externalNav" );
						if( externalNav ) externalNav.removeClass( "active" );
					
					}
					
					extrajudicial.activeAccordion = toggler;


					var externalNav = toggler.retrieve( "externalNav" );
					if( externalNav ){
						externalNav.addClass( "active" );
//						Cufon.refresh( externalNav );
						Cufon.refresh( ".nav a" );
					}

					Cufon.refresh( ".accordionToggle a" );

					var overviewLink = $$( '.overview' );
//					console.log( overviewLink );
					if( overviewLink ){
//						console.log( "::::::::::::::: :::::: ::: :: :" );
						overviewLink.removeClass( "active" );
						overviewLink.addClass( "inactive" );
						Cufon.refresh( overviewLink ); //.getElements( "a" ) );
					}

				}

			});

			extrajudicial.accordions.set( accordionElement.get( 'id' ), anAccordion );

			var id = accordionElement.get( "id" );
			var externalNav = $( "accordionNav_" + id );
			if( externalNav ) new extrajudicial.ui.ExternalAccordionNav( externalNav, anAccordion );
			targets.each( function( anElement, anIndex ){
				if( externalNav ) toggles[ anIndex ].store( "externalNav", externalNav.getElements( "li h4" )[anIndex] );
			});

		});

	}

}

extrajudicial.ui.ExternalAccordionNav = new Class({

	initialize: function( anElement, accordion ){

		this.element = $( anElement );
		this.accordion = accordion;

		var overviewLink = $$( '.overview' );
		if( overviewLink ) overviewLink.addEvent( 'click', this.onOverViewClick.bindWithEvent( this, overviewLink ) );

		this.actuators = this.element.getElement("ul").getElements( "a" );
		this.actuators.each( function( anActuator, anIndex ){
			anActuator.addEvent( 'click', this.onActuatorClick.bindWithEvent( this, anIndex ) ); 
		}, this );

	},
	
	onOverViewClick: function( e, overviewLink ){
		
		if( e && e.stop ){
			e.stop();
		}else if( e ){
			e.returnValue = false;
		}

		overviewLink.addClass( 'active' );
		overviewLink.removeClass( 'inactive' );

		if( extrajudicial.activeAccordion ){

			var indicator = extrajudicial.activeAccordion.getElement( ".indicator" );
			if( indicator ) indicator.set( "text", "+" );

			extrajudicial.activeAccordion.removeClass( "active" );
			extrajudicial.activeAccordion.addClass( "inactive" );

			var externalNav = extrajudicial.activeAccordion.retrieve( "externalNav" );
			if( externalNav ) externalNav.removeClass( "active" );

			extrajudicial.activeAccordion = null;
	
		}

		Cufon.refresh( ".accordionToggle a" );
		Cufon.refresh( overviewLink );
		Cufon.refresh( ".nav a" );
						
		this.accordion.display( -1 );


	},

	onActuatorClick: function( e, anIndex ){

		if( e && e.stop ){
			e.stop();
		}else if( e ){
			e.returnValue = false;
		}

		var overviewLink = $$( '.overview' );
		overviewLink.removeClass( "active" );
		overviewLink.addClass( "inactive" );
		Cufon.refresh( overviewLink );
		
		this.accordion.display( anIndex );
	}

});

window.addEvent( "domready", extrajudicial.init );
