ONO::FW::Edu::Apps::Modules::LangMix

package ONO::FW::Edu::Apps::Modules::LangMix;
################################################################################
# COPYRIGHT / LICENSE #
################################################################################
#
# This file is part of the ONO Software Project.
#
# Copyright (C) 2022-2026 Jos Kirps and The Joopita Project [ASBL]
# Copyright (C) 2011-2022 Jos Kirps and Joopita Research ASBL
# Copyright (C) 2006-2011 Jos Kirps and The Joopita Project
# Copyright (C) 2001-2006 Jos Kirps and The WobbleWolf Project
#
# This file, as well as many other parts of the ONO Software Project or
# related elements, are FREE SOFTWARE available under the ARTISTIC LICENSE 2.0.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# For the full license, see /ono/osr/license/LICENSE.txt, or write to
# jos_AT_kirps_DOT_com or contact_AT_joopita_DOT_com.
#
################################################################################
# END OF COPYRIGHT / LICENSE, HERE COMES THE CODE ... #
################################################################################

#: This module is a front end application module wrapper that has been
#: created for the Morzino Project (morzino.com) and that has been released
#: as Open Source software.
#:
#: Note that this is NOT a self-contained application, it is only a wrapper
#: that makes heavy use of the ONO Perl Framework application engine.

use strict;

use ONO::FW::Edu::Apps::ToolBox;

use ONO::Lib::PDF::Draw;
use ONO::Lib::PDF::ToolBox;
use ONO::Lib::Code::RandomID;
use ONO::Lib::Data::Convert;

use ONO::Lib::UI::Progress;
use ONO::Lib::UI::Check;

use ONO::FW::Apps::Core;
use ONO::FW::Apps::Core::Graphics;

use ONO::Lib::Parser;

use ONO::IO;

use ONO::FW::Apps::PDF;
use ONO::FW::Apps::ToolBox;

sub learn {

my (
$self,
$option,
$vars_ref,
$HTTP,
$BASE,
) = @_;

################################################################
# INIT - BEGIN
################################################################

my (
$db,
$community,
$action_url,
$form,
$format,
$canvas,
$pdfkey,
$sec,$min,$hour,
$mday,$mon,$year,
$wday,$yday,$timestamp,
$lang,
$BLK_ref,
$vars_ref,
) = ONO::FW::Apps::Core->init($vars_ref);

my %vars = %$vars_ref;
my %BLK = %$BLK_ref;

my $app = "lang_mix";

my $TITLE = "Language Mix";

my @txt = (
"Select and configure apps:",
"",
"",
"",
"",
"Corrections not available for this element",

"",
"all apps",
"none",
);

if ($vars{'app_lang'} eq "de") {

$TITLE = "$SITE's Sprachen Mix";

@txt = (
"Apps wählen und konfigurieren:",
"",
"",
"",
"",
"Verbesserungen für dieses Element nicht verfügbar",

"",
"alle Apps",
"keine",
);

}

if ($vars{'app_lang'} eq "lu") {

$TITLE = "$SITE's Sprooche Mix";

@txt = (
"Apps wielen a configuréieren:",
"",
"",
"",
"",
"Verbesserunge fir dëst Element net disponibel",

"",
"all Apps",
"keng",
);

}

if ($vars{'app_lang'} eq "fr") {

$TITLE = "$SITE's Mix Langues";

@txt = (
"Choisir et configurer les applications:",
"",
"",
"",
"",
"Corrections non disponibles pour cet élément",

"",
"toutes",
"aucune",
);

}

my $APP_LANG_FILE = "en";
if ($vars{'app_lang'} =~ /(de|lu|fr)/) {
$APP_LANG_FILE = $1;
}
if (ONO::IO->devstation) {
$APP_LANG_FILE = "dev";
}
my %APP_NAMES;

foreach my $line (ONO::IO->list("var/community/$community/apps/names/$APP_LANG_FILE.txt")) {
my @lp = split(/:/,$line);
$APP_NAMES{$lp[0]} = $lp[1];
}

if (!$vars{'app_input_print_options_title'}) {
$vars{'app_input_print_options_title'} = $TITLE;
}

$vars{'app_disable_storage_type'} = 1;

ONO::FW::Apps::Core->now("lang_mix",$app,$vars{'app_lang'});

my $TOP100;
for (my $i = 10; $i < 101; $i = $i + 10) {
$TOP100 .= qq~<option value="top_$i">Top $i</option>~;
}

my $WEB;

$WEB .= ONO::FW::Apps::Core->output_paper_save($pdfkey,$BLK_ref,\%vars,$HTTP,$BASE,"$year$mon$mday");

my ($sel_app_num,$sel_app_names_ref) = ONO::FW::Apps::PDF->worksheet_maker_sel_apps(\%vars);

if (ONO::FW::Apps::Core->running(\%vars,$db) && ($sel_app_num || $vars{'output_paper_finalize'})) {

# back button blocker must be disabled in worksheet creation mode!
#
# $WEB .= ONO::FW::Apps::Core->blockbackbutton($BASE,$vars_ref);

#############################################################
# GENERATE PDF ELEMENTS
#############################################################

if ($vars{'output_paper_finalize'}) {

$WEB .= ONO::FW::Apps::PDF->worksheet_maker_finalizer(
$BASE,
$HTTP,
$canvas,
$format,
$pdfkey,
$year,$mon,$mday,
\%APP_NAMES,
\@txt,
$BLK_ref,
$vars_ref,
);

} else {

if (!$vars{'output_paper_id'}) {
$vars{'output_paper_id'} = "$year$mon$mday-".ONO::Lib::Code::RandomID->make(32);
}

$WEB .= ONO::FW::Apps::PDF->worksheet_maker_processor(\%vars);

}

} else {

#############################################################
# EXERCISE SETUP
#############################################################

if (!$vars{'app_input_class_level'}) {
$vars{'app_input_class_level'} = "31";
$vars{'app_input_settings_class'} = "31";
}

if (!$vars{'app_input_apps_level'}) {
$vars{'app_input_apps_level'} = 2;
}

if (!$vars{'app_input_settings_level'}) {
$vars{'app_input_settings_level'} = 2;
}

if (!$sel_app_num) {
$vars{'app_input_app_vocabulary'} = 1;
}

my (@APP_CONFS,%JS_SEL);

my @app1 = (
"vocabulary: : ,21,22,31,32,41,42,50:",
"verbs_german: : ,21,22,31,32,41,42,50:",
"verbs_french: : ,21,22,31,32,41,42,50:",
"verbs_english: : ,21,22,31,32,41,42,50:",
"write_letters: : ,21,22,31,32,41,42,50:",
"",
);

my @app2 = (
"copy_words: : ,21,22,31,32,41,42,50:",
"writewords: : ,21,22,31,32,41,42,50:",
"imgwords: : ,21,22,31,32,41,42,50:",
"memorize_words: : ,21,22,31,32,41,42,50:",
"",
"",
);

my @app3 = (
"scrambled: : ,21,22,31,32,41,42,50:",
"findwords: : ,21,22,31,32,41,42,50:",
"rightwrong: : ,21,22,31,32,41,42,50:",
"",
"",
"",
);

my @app4 = (
"word_search: : ,21,22,31,32,41,42,50:",
"cutpaste: : ,21,22,31,32,41,42,50:",
"sentences: : ,21,22,31,32,41,42,50:",
"",
"",
"",
);

# "dictation: : ,21,22,31,32,41,42,50:",
# "crosswords: : ,21,22,31,32,41,42,50:",
# "dictionary: : ,21,22,31,32,41,42,50:",

$vars{'app_conf_check_show_icon'} = 1;

foreach my $selapp (@app1,@app2,@app3,@app4) {

my @sp = split(/:/,$selapp);

if ($sp[0]) {
my $show_selapp = $sp[0];
if ($APP_NAMES{$sp[0]}) {
$show_selapp = $APP_NAMES{$sp[0]};
}
if ($sp[0] =~ /^verbs_(.*?)$/) {
$show_selapp = $sp[0];
}
if ($show_selapp =~ s~ ~ <span class="small col9">~) {
$show_selapp .= qq~</span>~;
}
if (ONO::IO->devstation && $sp[0] !~ /^verbs_(.*?)$/) {
$show_selapp = qq~<a href="/cgi-bin/local/perl/$community/apps/$sp[0].pl" target="_blank" class="col3">$show_selapp</a>~;
} else {
$show_selapp = qq~<div class="cursorlink noselect" onclick="onojs_ui_switch_toggle('app_input_app_$sp[0]','1','0');">$show_selapp</div>~;
}
$vars{'app_conf_check_text_class'} = "";
$vars{'app_conf_check_icon_size'} = 28;
$vars{'app_conf_check_icon_js'} = "onojs_ui_switch_toggle('app_input_app_$sp[0]','1','0');";

my $app_script = $sp[0];
if ($sp[0] =~ /(copy_words|cutpaste|dictation|findwords|imgwords|memorize_words|rightwrong|sentences|scrambled|word_search|writewords)/) {
$app_script = "lang_trainer_$app_script";
}

@APP_CONFS = (@APP_CONFS,ONO::FW::Apps::ToolBox->conf_input("check",$BLK_ref,\%vars,"","","app_$app_script",$vars{"app_input_app_$app_script"},$show_selapp));
$JS_SEL{'apps_all'} .= qq~onojs_ui_switch_on('app_input_app_$sp[0]','1');~;
$JS_SEL{'apps_none'} .= qq~onojs_ui_switch_off('app_input_app_$sp[0]','0');~;

foreach my $cy (split(/,/,$sp[2])) {
if ($cy =~ /[0-9]/) {
$JS_SEL{"sel_apps_$cy"} .= qq~onojs_ui_switch_on('app_input_app_$sp[0]','1');~;
}
}

} else {
@APP_CONFS = (@APP_CONFS,"");
}

}

$vars{'app_conf_check_show_icon'} = 0;

my $APP_OPEN = ONO::FW::Apps::ToolBox->conf_input_splitrow_open("w25","default_table ml10");
my $APP_COL = ONO::FW::Apps::ToolBox->conf_input_splitrow_col("w25","default_table ml10");
my $APP_CLOSE = ONO::FW::Apps::ToolBox->conf_input_splitrow_close();

my ($CONF,$BUTS1,$BUTS2,$BUTS3,$BUTS4,@LEVELS);

my $BCLASS = "left";

foreach my $opt (
"10:C 1: :0:",
"21:C 2.1: :0:",
"22:C 2.2: :0:",
"31:C 3.1: :0:",
"32:C 3.2: :0:",
"41:C 4.1: :0:",
"42:C 4.2: :0:",
"50:Lycée: :0:",
) {
my @op = split(/:/,$opt);

@LEVELS = (@LEVELS,$op[0]);

if ($op[0] eq "50") {
$BCLASS = "right";
}

my $SEL;

if ($op[0] eq $vars{'app_input_class_level'}) {
$SEL = " button_blue";
$JS_SEL{'default'} = qq~lang_mix_select_buts1('$op[0]','$BCLASS','$op[3]','$op[4]','$op[6]','$op[7]','$op[8]','$op[9]');~;
}
$BUTS1 .= qq~<a id="buts1_$op[0]" href="javascript:void(0);" class="button button_$BCLASS$SEL" onclick="lang_mix_select_buts1('$op[0]','$BCLASS','$op[3]','$op[4]','$op[6]','$op[7]','$op[8]','$op[9]');">$op[1]</a>~;

$JS_SEL{'b1_clear'} .= qq~onojs_class('buts1_$op[0]','button button_$BCLASS');~;
$JS_SEL{'sel_apps'} .= qq~function lang_mix_apps_$op[0]() {$JS_SEL{"sel_apps_$op[0]"}}\n~;

$BCLASS = "middle";
}

my %BUTSEL;
$BUTSEL{"BUTS2_$vars{'app_input_apps_level'}"} = " button_yellow";
$BUTSEL{"BUTS4_$vars{'app_input_settings_level'}"} = " button_yellow";

$BUTS1 .= qq~<input type="hidden" id="app_input_class_level_id" name="app_input_class_level" value="$vars{'app_input_class_level'}">
<input type="hidden" id="app_input_range_default_from_id" name="app_input_range_default_from" value="$vars{'app_input_range_default_from'}">
<input type="hidden" id="app_input_range_default_to_id" name="app_input_range_default_to" value="$vars{'app_input_range_default_to'}">
~;

$BUTS2 = qq~<a id="buts2_1" href="javascript:void(0);" onclick="lang_mix_sel_buts2('1');" class="button button_left$BUTSEL{"BUTS2_1"}">$BLK{'easy'}</a>
<a id="buts2_2" href="javascript:void(0);" onclick="lang_mix_sel_buts2('2');" class="button button_middle$BUTSEL{"BUTS2_2"}">$BLK{'normal'}</a>
<a id="buts2_3" href="javascript:void(0);" onclick="lang_mix_sel_buts2('3');" class="button button_right$BUTSEL{"BUTS2_3"}">$BLK{'hard'}</a>
<input type="hidden" id="app_input_apps_level_id" name="app_input_apps_level" value="$vars{'app_input_apps_level'}">
~;

$BUTS4 = qq~<a id="buts4_1" href="javascript:void(0);" onclick="lang_mix_sel_buts4('1');" class="button button_left$BUTSEL{"BUTS4_1"}">$BLK{'easy'}</a>
<a id="buts4_2" href="javascript:void(0);" onclick="lang_mix_sel_buts4('2');" class="button button_middle$BUTSEL{"BUTS4_2"}">$BLK{'normal'}</a>
<a id="buts4_3" href="javascript:void(0);" onclick="lang_mix_sel_buts4('3');" class="button button_right$BUTSEL{"BUTS4_3"}">$BLK{'hard'}</a>
<input type="hidden" id="app_input_settings_level_id" name="app_input_settings_level" value="$vars{'app_input_settings_level'}">
~;

$CONF .= qq~<tr>
<td class="pad10_2" colspan="2">
<div class="bg_fabric bo radius20 p5"><div class="inline w100"><div class="fr rel"><div class="rel" style="left:2px">$BUTS2</div></div>$BUTS1</div></div>
<input type="hidden" name="output_paper_mix_source" value="lang_mix">
</td>
</tr>
~;

#$CONF .= ONO::FW::Apps::ToolBox->conf_input("spacer", $BLK_ref,\%vars,"");

$CONF .= ONO::FW::Apps::ToolBox->conf_input_box_open("pad10_2 ml20","wide_table");
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_open("");
$CONF .= qq~<td class="bold">$BLK{'Vocabulary'}:</td>
<td>
<div class="select select_small"><select name="app_input_lang_mix_vocs_default_group">
<option value="">$BLK{'default'}</option>
</select></div>
</td>
<td class="pad5_2"></td>
<td class="bold">$BLK{'Verbs'}:</td>
<td>
<div class="select select_small"><select name="app_input_lang_mix_verbs_default_group">
$TOP100
</select></div>
</td>
<td class="pad5_2 col9 italic">  more options are available under 'more settings' ...</td>
~;
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_close();
$CONF .= ONO::FW::Apps::ToolBox->conf_input_box_close();

for (my $n = 0; $n < 6; $n++) {

$CONF .= $APP_OPEN;
$CONF .= $APP_CONFS[$n];
$CONF .= $APP_COL;
$CONF .= $APP_CONFS[$n+6];
$CONF .= $APP_COL;
$CONF .= $APP_CONFS[$n+12];
$CONF .= $APP_COL;
$CONF .= $APP_CONFS[$n+18];
$CONF .= $APP_CLOSE;

}

my $SELECT = qq~<div class="rel" style="left:-6px">
<a href="javascript:void(0);" onclick="$JS_SEL{'apps_all'}" class="button_green button_left">$txt[7]</a>
<a href="javascript:void(0);" onclick="$JS_SEL{'apps_none'}" class="button_red button_right">$txt[8]</a>
</div>
~;

if (!$vars{"app_input_lang_use_en"} && !$vars{"app_input_lang_use_de"} && !$vars{"app_input_lang_use_fr"}) {
$vars{"app_input_lang_use_de"} = 1;
$vars{"app_input_lang_use_fr"} = 1;
}

$CONF .= ONO::FW::Apps::ToolBox->conf_input("spacer", $BLK_ref,\%vars,"");

$CONF .= ONO::FW::Apps::ToolBox->conf_input_box_open("bg_fabric bo radius20 pad10_2 mr5","wide_table");
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_open("");
$CONF .= ONO::FW::Apps::ToolBox->conf_input("custom", $BLK_ref,\%vars,"",$SELECT);
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_col("");
$CONF .= ONO::FW::Apps::ToolBox->conf_input("langsel", $BLK_ref,\%vars,"","de");
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_col("");
$CONF .= ONO::FW::Apps::ToolBox->conf_input("langsel", $BLK_ref,\%vars,"","fr");
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_col("");
$CONF .= ONO::FW::Apps::ToolBox->conf_input("langsel", $BLK_ref,\%vars,"","en");
$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_col("","wide_table");

$CONF .= qq~<td>
<div class="rel">
<div class="rel" style="left:10px">
<a href="javascript:void(0);" onclick="onojs_block('conf_box_overlay');onojs_trans('lang_mix_conf_box',30);" class="button_blue fr">$BLK{'more_settings'}</a>
</div>
</div>
</td>
~;

$CONF .= ONO::FW::Apps::ToolBox->conf_input_splitrow_close();
$CONF .= ONO::FW::Apps::ToolBox->conf_input_box_close();

# $vars{'output_paper_button_save_pdf'} = 1;
if (!$vars{'output_paper_num_of_pages'}) {
$vars{'output_paper_num_of_pages'} = 4;
}

if (ONO::IO->devstation) {
$vars{'output_paper_num_of_pages'} = 1;
}

my @TABLE;

foreach my $opt (
"0:app_input_lang_mix_tens_barrier:$BLK{'tens_barrier'}: : ,21,22,31,32,41,42,50:",
) {
my @op = split(/:/,$opt);

if ($op[3] =~ /=/) {

my ($SEL,$SEL2);
foreach my $selopt (split(/\,/,$op[3])) {
my @sp = split(/=/,$selopt);
my $sel;
if ($sp[0] eq $vars{$op[1]}) {
$sel = " selected";
}
$SEL .= qq~<option value="$sp[0]"$sel>$sp[1]</option>~;
}

my $MAX_WIDTH = 120;

if ($op[0] == 2 && $op[1] =~ /mix_angles/) {

my %sel;
$sel{$vars{"$op[1]_precision"}} = " selected";

$SEL2 .= qq~~;

}

$TABLE[$op[0]] .= qq~<table class="default_table mb5 rel" style="top:-3px">
<tr>
<td>$op[2]: </td>
<td class="p0">
<div class="select_small fl" style="max-width:${MAX_WIDTH}px"><select id="$op[1]_id" name="$op[1]">$SEL</select></div>
$SEL2
</td>
</tr>
</table>
~;

} else {

$JS_SEL{'settings_none'} .= qq~onojs_ui_switch_off('$op[1]','0');\n~;

foreach my $level (split(/,/,",$op[4],")) {
if ($level =~ /[0-9]/) {
$JS_SEL{"sel_settings_$level"} .= "onojs_ui_switch_on('$op[1]','1');\n";
}
}

my $SWITCH = ONO::Lib::UI::Check->switch($op[1],$vars{$op[1]},"mT");

if ($op[0] == 2 && $op[1] eq "_geo_opts_") {

$TABLE[$op[0]] .= qq~<div class="inline w100 mb2">
###_GEO_OPTS_###
</div>
~;

} else {

$TABLE[$op[0]] .= qq~<div class="inline w100 mb2">
<table class="default_table mb10">
<tr class="vtop">
<td class="p0">$SWITCH</td>
<td></td>
<td class="p0 lh125">$op[2]</td>
</tr>
</table>
</div>
~;

}

}

}

$JS_SEL{'settings_none'} .= qq~onojs_setvalue('app_input_lang_mix_comma_id','0');
onojs_setvalue('app_input_roundup_id','0');

onojs_setvalue('app_input_lang_mix_geometry_id','10');
onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','m');
~;

$JS_SEL{"sel_settings_21"} .= qq~~;
$JS_SEL{"sel_settings_22"} .= qq~onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','md');
~;
$JS_SEL{"sel_settings_31"} .= qq~onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','md');
~;
$JS_SEL{"sel_settings_32"} .= qq~onojs_setvalue('app_input_lang_mix_geometry_id','05');
~;
$JS_SEL{"sel_settings_41"} .= qq~onojs_setvalue('app_input_lang_mix_comma_id','1');
~;
$JS_SEL{"sel_settings_42"} .= qq~onojs_setvalue('app_input_lang_mix_comma_id','rand');
~;
$JS_SEL{"sel_settings_50"} .= qq~onojs_setvalue('app_input_lang_mix_comma_id','rand');
~;


foreach my $level (@LEVELS) {

$JS_SEL{'sel_settings'} .= qq~function lang_mix_settings_$level() {$JS_SEL{"sel_settings_$level"}}\n~;

}

my $SCRIPT = qq~function lang_mix_clear_buts1() {$JS_SEL{'b1_clear'}}
function lang_mix_clear_buts2() {onojs_class('buts2_1','button button_left');onojs_class('buts2_2','button button_middle');onojs_class('buts2_3','button button_right');}
function lang_mix_clear_buts3() {$JS_SEL{'b3_clear'}}
function lang_mix_clear_buts4() {onojs_class('buts4_1','button button_left');onojs_class('buts4_2','button button_middle');onojs_class('buts4_3','button button_right');}
$JS_SEL{'sel_apps'}
$JS_SEL{'sel_settings'}
function lang_mix_sel_buts2(opt) {

lang_mix_clear_buts2();
onojs_setvalue('app_input_apps_level_id',opt);

var min = onojs_getvalue('app_input_range_default_from_id');
var max = onojs_getvalue('app_input_range_default_to_id');

if (opt == 1) {
onojs_class('buts2_1','button button_left button_green');
min = min / 4;
max = max / 4;
}
if (opt == 2) {
onojs_class('buts2_2','button button_middle button_yellow');
min = min / 2;
max = max / 2;
}
if (opt == 3) {
onojs_class('buts2_3','button button_right button_red');
}
if (min < 1) {
min = 1;
}
onojs_setvalue('app_input_range_from_id',min);
onojs_setvalue('app_input_range_to_id',max);

onojs_ui_switch_on('app_input_op_add','1');
onojs_ui_switch_off('app_input_op_sub','0');
onojs_ui_switch_off('app_input_op_mul','0');
onojs_ui_switch_off('app_input_op_div','0');

var level = onojs_getvalue('app_input_class_level_id');

if (level == 10 && opt > 2) {
onojs_ui_switch_on('app_input_op_sub','1');
}
if (level == 21 && opt > 1) {
onojs_ui_switch_on('app_input_op_sub','1');
}
if (level == 22) {
onojs_ui_switch_on('app_input_op_sub','1');
if (opt > 2) {
onojs_ui_switch_on('app_input_op_mul','1');
onojs_ui_switch_on('app_input_app_multiply','1');
onojs_ui_switch_on('app_input_app_written_calc','1');
} else {
onojs_ui_switch_off('app_input_app_multiply','0');
onojs_ui_switch_off('app_input_app_written_calc','0');
}
}
if (level == 31) {
onojs_ui_switch_on('app_input_op_sub','1');
onojs_ui_switch_on('app_input_op_mul','1');
}
if (level == 32) {
onojs_ui_switch_on('app_input_op_sub','1');
onojs_ui_switch_on('app_input_op_mul','1');
if (opt > 2) {
onojs_ui_switch_on('app_input_op_div','1');
}
}
if (level > 40) {
onojs_ui_switch_on('app_input_op_sub','1');
onojs_ui_switch_on('app_input_op_mul','1');
onojs_ui_switch_on('app_input_op_div','1');
}

lang_mix_sel_buts4(opt);

}
function lang_mix_sel_buts4(opt) {

lang_mix_clear_buts4();
onojs_setvalue('app_input_settings_level_id',opt);

var level = onojs_getvalue('app_input_class_level_id');

if (opt == 1) {
onojs_class('buts4_1','button button_left button_green');
}
if (opt == 2) {
onojs_class('buts4_2','button button_middle button_yellow');
}
if (opt == 3) {
onojs_class('buts4_3','button button_right button_red');
}

if (level == 10) {
if (opt == 3) {
onojs_ui_switch_on('app_input_tens_barrier','1');
} else {
onojs_ui_switch_off('app_input_tens_barrier','0');
}
}
if (level == 21) {
if (opt > 1) {
onojs_ui_switch_on('app_input_tens_barrier','1');
} else {
onojs_ui_switch_off('app_input_tens_barrier','0');
}
if (opt > 2) {
onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','md');
} else {
onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','m');
}
}
if (level == 22) {
if (opt > 2) {
onojs_setvalue('app_input_lang_mix_geometry_id','05');
} else {
onojs_setvalue('app_input_lang_mix_geometry_id','10');
}
if (opt < 2) {
onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','m');
} else {
onojs_setvalue('app_input_lang_mix_geometry_measuredraw_id','md');
}
}
if (level == 31) {
if (opt > 2) {
onojs_setvalue('app_input_lang_mix_geometry_id','05');
} else {
onojs_setvalue('app_input_lang_mix_geometry_id','10');
}
}
if (level == 32) {
if (opt > 2) {
onojs_setvalue('app_input_lang_mix_geometry_id','01');
} else {
onojs_setvalue('app_input_lang_mix_geometry_id','05');
}
}
if (level == 41) {
if (opt < 2) {
onojs_setvalue('app_input_lang_mix_angles_id','90');
} else {
onojs_setvalue('app_input_lang_mix_angles_id','180');
}
if (opt > 2) {
onojs_setvalue('app_input_lang_mix_angles_id','360');
}
}
if (level == 42) {
if (opt < 2) {
onojs_setvalue('app_input_lang_mix_angles_id','180');
} else {
onojs_setvalue('app_input_lang_mix_angles_id','360');
}
// if (opt > 2) {
// onojs_setvalue('app_input_lang_mix_comma_id','3');
// }
}
if (level == 50) {
if (opt < 2) {
onojs_setvalue('app_input_lang_mix_comma_id','1');
} else {
onojs_setvalue('app_input_lang_mix_comma_id','rand');
}
if (opt > 2) {
onojs_ui_switch_on('app_input_lang_mix_geometry_circles','1');
} else {
onojs_ui_switch_off('app_input_lang_mix_geometry_circles','0');
}
}

}

function lang_mix_apps(level) {

$JS_SEL{'apps_none'};

if (level == 10) {lang_mix_apps_10()}
if (level == 21) {lang_mix_apps_21()}
if (level == 22) {lang_mix_apps_22()}
if (level == 31) {lang_mix_apps_31()}
if (level == 32) {lang_mix_apps_32()}
if (level == 41) {lang_mix_apps_41()}
if (level == 42) {lang_mix_apps_42()}
if (level == 50) {lang_mix_apps_50()}

}

function lang_mix_settings(level) {

$JS_SEL{'settings_none'};

if (level == 10) {lang_mix_settings_10()}
if (level == 21) {lang_mix_settings_21()}
if (level == 22) {lang_mix_settings_22()}
if (level == 31) {lang_mix_settings_31()}
if (level == 32) {lang_mix_settings_32()}
if (level == 41) {lang_mix_settings_41()}
if (level == 42) {lang_mix_settings_42()}
if (level == 50) {lang_mix_settings_50()}

}

function lang_mix_select_buts1(level,bclass,min,max,add,sub,mul,div) {

onojs_setvalue('app_input_class_level_id',level);
lang_mix_clear_buts1();
onojs_class('buts1_'+level,'button button_blue button_'+bclass);
lang_mix_apps(level);
lang_mix_settings(level);
lang_mix_sel_buts2('2');

}
~;

if (!$vars{'output_paper'}) {

$SCRIPT .= $JS_SEL{'default'};

}

my $HIDE = "hide";
my $TOP = 20;
my $LEFT = 20;

my $dev_setup_displace;

$dev_setup_displace++;

if (ONO::IO->devstation && $dev_setup_displace) {
$HIDE = "";
$TOP = 480;
$LEFT = 360;
}

my $TENSES;

foreach my $option ('fr','de','en') {

my ($codes_ref,$tenses_ref,$pres_ref,$past_ref,$fut_ref) = ONO::FW::Apps::Core->lang_tenses($option);

my @codes = @$codes_ref;
my $codes_used;
foreach my $code (@codes) {
if ($vars{"app_input_lang_mix_${option}_tense_use_$code"}) {
$codes_used++;
}
}
if (!$codes_used) {
$vars{"app_input_lang_mix_${option}_tense_use_$codes[0]"} = 1;
}

$TENSES .= qq~<td>
<div class="box_paper mr5">
<div class="fl"><img class="flag ml5 mr10" src="/ono/osr/images/flags/languages/$option.png" style="width:20px;height:16px" alt="$option"></div>
<div class="large bold col6">$BLK{'Verbs'}</div>
<table class="default_table mt5">~;
$TENSES .= ONO::FW::Apps::ToolBox->conf_input("tenses",$BLK_ref,\%vars,"",$tenses_ref,$pres_ref,$past_ref,$fut_ref,"M",$option);
$TENSES .= qq~ </table>
</div>
</td>
~;

}

my $OVERLAY = qq~<div id="conf_box_overlay" class="abs $HIDE" style="top:${TOP}px;left:${LEFT}px;width:880px;z-index:999">
<div class="box_black">
<div class="fr"><div class="rel" style="top:-2px">$BUTS4</div></div>
<h3 class="cole">$BLK{'Settings'}</h3>
<div class="box_paper rel" style="min-height:360px">


<div class="mt10 ml5">
<table class="wide_table"><tr class="vtop">$TENSES</tr></table>
</div>

<table class="wide_table mt10">
<tr class="vtop">
<td class="w40 p0">
<table class="wide_table">
<tr class="vtop">
<td class="w50">
<div class="ml5">
<div class="large bold col6">$BLK{'Vocabulary'}</div>
<div class="mt10 ml5">$TABLE[0]</div>
</div>
</td>
<td class="w50">
<div class="ml5">
<div class="large bold col6"> </div>
<div class="mt10 ml5">$TABLE[1]</div>
</div>
</td>
</tr>
</table>
</td>
<td class="w60">
<div class="ml20">
<div class="large bold col6">$BLK{'Verbs'}</div>
<div class="mt10 ml5">
<table class="default_table"><tr class="vtop">$TABLE[2]</tr></table>
</div>
</div>
</td>
</tr>
</table>
<div class="abs" style="right:20px;bottom:10px">
<a href="javascript:void(0);" onclick="onojs_hide('conf_box_overlay');onojs_trans('lang_mix_conf_box',100);" class="button_green button_big"> $BLK{'ok'} </a>
</div>
</div>
</div>
</div>
~;

my $GEO_OPTS = qq~<table class="default_table ml20">
<tr class="vtop">
<td>$TABLE[21]</td>
<td class="p5"></td>
<td>$TABLE[22]</td>
<td class="p5"></td>
<td>$TABLE[23]</td>
</tr>
</table>
~;

$OVERLAY =~ s~###_GEO_OPTS_###~$GEO_OPTS~;

$vars{'conf_box_title'} = $txt[0];
$vars{'app_conf_box_maxwidth'} = 900;
$vars{'app_conf_box_color'} = "black";
$vars{'app_conf_box_id'} = "lang_mix_conf_box";
$vars{'app_conf_box_inner_style'} = "padding:10px 5px 0px 5px";

$WEB .= ONO::FW::Apps::Core->conf_box(
$db,
$community,
$app,
$form,
"",
$action_url,
$CONF,
$lang,
$BLK_ref,
\%vars,
"p-cdi-CDI-W-t-U-K",
$OVERLAY,
);

$WEB .= qq~\n<script>\n$SCRIPT\n</script>\n~;

}

# $WEB =~ s~method="post"~method="get"~;

my ($status,$WEB) = ONO::Lib::Parser->parse($WEB,$vars_ref);

$WEB .= ONO::FW::Apps::Core->vardump($vars_ref);

$WEB = ONO::FW::Edu::Apps::ToolBox->apps_gate($WEB,$vars_ref);

return $WEB;

}

###################################################################
# SUBS
###################################################################

###################################################################
#### THAT'S IT :-D
###################################################################

1;

__END__