sub c_u_d_GetNewWordlets {

	local(%new_wordlets, %new_wordlets_cp, %new_wordlets_err, %new_wordlets_img, %new_wordlets_date);

	&RequireCode("$vars_config{CGIPath}/cp_new_wordlets.cgi");
	&c_n_w_GetNewWordlets;


	my %update;

	foreach my $thisk (sort keys %new_wordlets) {
		$update{'primary'}->{$thisk} = {
			'name'		=>	$new_wordlets{$thisk}->{'name'},
			'wordlet'	=>	$new_wordlets{$thisk}->{'new'},
			'version'	=>	$new_wordlets{$thisk}->{'version'},
			'humanversion'	=>	$new_wordlets{$thisk}->{'humanversion'},
		};
	} #endforeach

	foreach my $thisk (sort keys %new_wordlets_cp) {
		$update{'cp'}->{$thisk} = {
			'name'		=>	$new_wordlets_cp{$thisk}->{'name'},
			'wordlet'	=>	$new_wordlets_cp{$thisk}->{'new'},
			'version'	=>	$new_wordlets_cp{$thisk}->{'version'},
			'humanversion'	=>	$new_wordlets_cp{$thisk}->{'humanversion'},
		};
	} #endforeach

	foreach my $thisk (sort keys %new_wordlets_date) {
		$update{'date'}->{$thisk} = {
			'name'		=>	$new_wordlets_date{$thisk}->{'name'},
			'wordlet'	=>	$new_wordlets_date{$thisk}->{'new'},
			'version'	=>	$new_wordlets_date{$thisk}->{'version'},
			'humanversion'	=>	$new_wordlets_date{$thisk}->{'humanversion'},
		};
	} #endforeach


	foreach my $thisk (sort keys %new_wordlets_err) {
		$update{'err'}->{$thisk} = {
			'name'		=>	$new_wordlets_err{$thisk}->{'name'},
			'wordlet'	=>	$new_wordlets_err{$thisk}->{'new'},
			'version'	=>	$new_wordlets_err{$thisk}->{'version'},
			'humanversion'	=>	$new_wordlets_err{$thisk}->{'humanversion'},
		};
	} #endforeach


	foreach my $thisk (sort keys %new_wordlets_img) {
		$update{'img'}->{$thisk} = {
			'name'		=>	$new_wordlets_img{$thisk}->{'name'},
			'wordlet'	=>	$new_wordlets_img{$thisk}->{'new'},
			'version'	=>	$new_wordlets_img{$thisk}->{'version'},
			'humanversion'	=>	$new_wordlets_img{$thisk}->{'humanversion'},
		};
	} #endforeach

	#also changed in 6.1.0 - vars_wordlets -> reg_notify_admin's HTML version


	return (\%update);
}    #endsub c_u_d_GetNewWordlets

sub c_u_d_6090_ForumSanityCheck {

	my %blank = ();

	my @foru = &OpenForumsFile;

	foreach $one (@foru) {
		my $forum = (split(/\|\^\|/, $one))[8];
		$exact_path = &SetExactPath($forum);

		if(!-e "$vars_config{NonCGIPath}/$exact_path/forum_$forum.threads") {
			&WriteHashToFile("$vars_config{NonCGIPath}/$exact_path/forum_$forum.threads", "forum_topics", \%blank);
		}
		if(!-d "$vars_config{NonCGIPath}/cache-$vars_config{cache_pw}/backups") {
			mkdir("$vars_config{NonCGIPath}/cache-$vars_config{cache_pw}/backups", 0777);
		}
		if(!-d "$vars_config{NonCGIPath}/cache-$vars_config{cache_pw}/backups/Forum$forum") {
			mkdir("$vars_config{NonCGIPath}/cache-$vars_config{cache_pw}/backups/Forum$forum", 0777);
		}
	} #end

} #end

sub c_u_d_6090_PrepareCustomGraemlins {
	&RequireVars("$vars_config{VariablesPath}/vars_wordlets_img.cgi");
	if (-e "$vars_config{VariablesPath}/vars_graemlins.cgi") {
		&RequireVars("$vars_config{VariablesPath}/vars_graemlins.cgi");
	}

	if ((!$vars_graemlins) || (($vars_graemlins{custgraems} == 0) && (exists $vars_wordlets_img{graemlin_smile}))) {

		$vars_graemlins = {
			'origs' => {
				'01_smile' => {
					'trigger' => ':)',
					'image'   => 'smile.gif',
					'text'    => $vars_wordlets_img{graemlin_smile},
				},
				'02_frown' => {
					'trigger' => ':(',
					'image'   => 'frown.gif',
					'text'    => $vars_wordlets_img{graemlin_frown},
				},
				'03_redface' => {
					'trigger' => ':o',
					'image'   => 'redface.gif',
					'text'    => $vars_wordlets_img{graemlin_embarrassed},
				},
				'04_biggrin' => {
					'trigger' => ':D',
					'image'   => 'biggrin.gif',
					'text'    => $vars_wordlets_img{graemlin_big_grin},
				},
				'05_wink' => {
					'trigger' => ';)',
					'image'   => 'wink.gif',
					'text'    => $vars_wordlets_img{graemlin_wink},
				},
				'06_tongue' => {
					'trigger' => ':p',
					'image'   => 'tongue.gif',
					'text'    => $vars_wordlets_img{graemlin_razz},
				},
				'07_cool' => {
					'trigger' => ':cool:',
					'image'   => 'cool.gif',
					'text'    => $vars_wordlets_img{graemlin_cool},
				},
				'08_rolleyes' => {
					'trigger' => ':rolleyes:',
					'image'   => 'rolleyes.gif',
					'text'    => $vars_wordlets_img{graemlin_roll_eyes},
				},
				'09_mad' => {
					'trigger' => ':mad:',
					'image'   => 'mad.gif',
					'text'    => $vars_wordlets_img{graemlin_mad},
				},
				'10_eek' => {
					'trigger' => ':eek:',
					'image'   => 'eek.gif',
					'text'    => $vars_wordlets_img{graemlin_eek},
				},
				'11_confused' => {
					'trigger' => ':confused:',
					'image'   => 'confused.gif',
					'text'    => $vars_wordlets_img{graemlin_confused},
				},
			},
			'custgraems' => '0',
			'graems'     => {},
		};

		foreach my $one (qw(graemlin_big_grin graemlin_confused graemlin_cool graemlin_eek graemlin_embarrassed graemlin_frown graemlin_mad graemlin_razz graemlin_roll_eyes graemlin_smile graemlin_wink)) {
			delete $vars_wordlets_img{$one};
		}

		&WriteHashToFile("$vars_config{VariablesPath}/vars_wordlets_img.cgi", "vars_wordlets_img", \%vars_wordlets_img);

		&RequireCode("$vars_config{CGIPath}/cp_graemlins.cgi");
		&c_g_WriteVarsGraemlins;

	}    #endif

	return;

}    #endsub c_u_d_6100_PrepareCustomGraemlins


sub c_u_d_AdditionalTasks {

	#will contain additional upgrade tasks and checks in the future
	&c_u_d_6090_PrepareCustomGraemlins;
	&c_u_d_6090_ForumSanityCheck;
	return;
}    #endsub c_u_d_AdditionalTasks

1;   # must retutn 'true' for Perl - leave this line alone!
