$(document).ready(function(){
	// Add the initial style
		$('ul.accordion ul').css('display','none');
	// ---------------------
	
	// Add the openner icons to the levels with children
		$('ul.accordion li ul').each(function(){
			$(this).parent('li').prepend('<span class="openner">+</span>');
		});
	// -------------------------------------------------
	
	// Open the default children
		open_active_accord();
	// -------------------------
	
	// Handle the color of the accordion
		assign_colors_to_levels();
	// ---------------------------------
	
	$('ul.accordion li span.openner').click(function(){
		var openner = $(this);
		if(openner.hasClass('closer')){
			close_all_open_children(openner);
			close_accord(openner);
		}
		else{
			close_all_open_accordions(openner);
			open_accord(openner);
		}
	});
	$('.accordion .open:last').addClass('high_light');
});

function open_active_accord(){
	var open_li = $('ul.accordion li.open');
	open_li.parentsUntil('ul.accordion').each(function(){
		var current_parent = $(this);
		current_parent.css('display','block');
		current_parent.siblings('span.openner').each(function(){
			$(this).addClass('closer').html('-');
		});
	});
}

function assign_colors_to_levels(){
	var all_accordions = $('ul.accordion');
	all_accordions.each(function(){
		var current_accord = $(this);
		var back_color = current_accord.css('background-color');
		var parts = back_color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
		if(parts == null && back_color != ''){
			back_color = back_color.replace('#','');
			if(back_color.length == 3){
				var temp = back_color.split('');
				temp[0] += temp[0];
				temp[1] += temp[1];
				temp[2] += temp[2];
				back_color = temp.join('');
			}
			
			var temp = colorhex2dec(back_color).split(' ');
			parts = ['rgb(18, 211, 90)',temp[0],temp[1],temp[2]];
		}
		
		if(parts){
			var counter = 20;
			current_accord.contents().find('ul').each(function(){
				var current_child = $(this);
				var level = current_child.parentsUntil('ul.accordion').length;
				var diff = counter * level;
				var new_color = 'rgb('+(parseInt(parts[1])+diff)+','+(parseInt(parts[2])+diff)+','+(parseInt(parts[3])+diff)+')';
				current_child.css('background-color',new_color);
			});
		}
	});
}

function open_accord(openner){
	openner	.addClass('closer')
			.html('-')
			.siblings('ul:first')
			.stop()
			.css('height','auto')
			.slideDown('slow');
}

function close_accord(closer){
	closer	.removeClass('closer')
			.html('+')
			.siblings('ul:first')
			.stop()
			.slideUp('fast',function(){
				$(this).css('height','auto');
			});
}

function close_all_open_accordions(current){
	var all_closers = current.parents('ul.accordion').contents().find('span');
	var current_accor = current.siblings('ul:first');
	all_closers.each(function(){
		var closer = $(this);
		if(closer.hasClass('openner')){
			var temp_accor = closer.siblings('ul:first');
			if(temp_accor.has(current).length == 0){
				close_accord(closer);
			}
		}
	});
}

function close_all_open_children(current_closer){
	var current_accor = current_closer.siblings('ul:first');
	var children = current_accor.contents().find('span');
	children.each(function(){
		var closer = $(this);
		if(closer.hasClass('openner')){
			closer	.removeClass('closer')
					.siblings('ul:first')
					.stop()
					.css('height','auto')
					.css('display','none');
		}
	});
}

function Hex2Dec(x){
	var y = 0, z;
	for(var i=0;i<x.length;i++){
		z = x.toUpperCase().charCodeAt(i)
		y = 16*y+z-((z<58)?48:55)
	}
	return y;
}

function colorhex2dec(x){
	return x.replace(/(..)/g,function($1){return Hex2Dec($1)+' '})
}
