#!/usr/bin/perl

use strict;
use Image::Magick;

my $script = "img-magick.pl";
my $version = "$script v. 20061224";

require("img-magick.conf");
my ($galrep,$password,$back_txt,$back_url,$galerie_txt,$multirep,$monorep,$SIGNATURE,$ADMIN,$HEADER,$FOOTER,$CSS,$diapowait) = &init1();
my ($defautformat,$mini,$xmini,$screen,$xscreen,$max_image,$sub_title,$galerie_title,$use_sample,$use_ico,$use_text,$use_alpha,$use_order) = &init2();
my ($BODYcolor,$BODYimg,$BODYtext,$BODYlink,$FONTface,$FONTsize,$TABLEcolor,$TDcolor,$pagemax,$backtxt,$backurl) = &init_html();
$ADMIN = "<a href=\"$ADMIN/img_conf.pl\">admin</a>";

#########################################################################
#### parametres utilisateur :

my $repmini_base = "";
my $repscreen_base = "";
my $repico_base = ".ico";

my $errmsg = "Aucune vue n'est disponible";
my $next2_txt = "page suiv.";
my $prev2_txt = "page préc.";
my $next_txt = "image suiv.";
my $prev_txt = "image préc.";
my $list_txt = "vue galerie";
my $home_txt = "début";
my $end_txt = "fin";
my $diapostart_txt = "diaporama";
my $diapostop_txt = "stop";
my $tableHmax = 80; ## je garantis une valeur (taille max des vignette vue index)

## html :
my $html = 1;

## ico :
my $next_ico = "next.gif";
my $prev_ico = "prev.gif";
my $next2_ico = "next2.gif";
my $prev2_ico = "prev2.gif";
my $list_ico = "up.gif";
my $home_ico = "home.gif";
my $end_ico = "end.gif";
my $galerie_ico = "stop.gif";
my $down_ico = "down.gif";
my $play_ico = "play.gif";
my $pause_ico = "pause.gif";
my $blank_ico = "blank.gif";

## fin parametres utilisateur
#########################################################################


#########################################################################
#### parametrage programme

my $ARGS = @ARGV[0];
# nettoyage de la requete
$ARGS =~ s/%([0-9A-F][0-9A-F])/pack("C",oct("0x$1"))/ge;
$ARGS =~ tr/+/ /;
$ARGS =~ s/\///g;
$ARGS =~ s/\.\.//g;
$ARGS =~ s/^\.$//g;
my @ARGS = split(/@@/, $ARGS);
my ($request,$format,$comp)=@ARGS;

if(!$monorep){
    $monorep = "defaut_galerie";
}

if((!$multirep) and ($monorep)){
    $request = $monorep;
}

my ($gal_title,$backtxt2,$backurl2);
if (-e "$galrep/.conf"){
    require("$galrep/.conf");
    ($defautformat,$mini,$xmini,$screen,$xscreen,$max_image,$sub_title,$galerie_title,$use_sample,$use_ico,$use_text,$use_alpha,$use_order) = &init2();
    ($BODYcolor,$BODYimg,$BODYtext,$BODYlink,$FONTface,$FONTsize,$TABLEcolor,$TDcolor,$pagemax,$backtxt,$backurl) = &init_html();
}
if (-e "$galrep/$request.conf"){
    require("$galrep/$request.conf");
    ($defautformat,$mini,$xmini,$screen,$xscreen,$max_image,$sub_title,$gal_title,$use_sample,$use_ico,$use_text,$use_alpha,$use_order) = &init2();
    ($BODYcolor,$BODYimg,$BODYtext,$BODYlink,$FONTface,$FONTsize,$TABLEcolor,$TDcolor,$pagemax,$backtxt2,$backurl2) = &init_html();
}
if (-d "$galrep/$request/$repico_base"){
    $repico_base = $request."/".$repico_base;
}

if(!$BODYcolor){$BODYcolor = "white";}
if(!$TABLEcolor){$TABLEcolor = $BODYcolor;}
if(!$TDcolor){$TDcolor = $BODYcolor;}

my $BODY = "<BODY BGCOLOR=\"$BODYcolor\" BACKGROUND=\"$BODYimg\" TEXT=\"$BODYtext\" LINK=\"$BODYlink\" ALINK=\"$BODYlink\" VLINK=\"$BODYlink\">";
my $FONT = "<FONT FACE=\"$FONTface\" SIZE=\"$FONTsize\">";

my ($next_txt2,$prev_txt2,$next2_txt2,$prev2_txt2,$list_txt2,$home_txt2,$end_txt2,$galerie_txt2) = ("<i>$next_txt</i>","<i>$prev_txt</i>","<i>$next2_txt</i>","<i>$prev2_txt</i>","<i>$list_txt</i>","<i>$home_txt</i>","<i>$end_txt</i>","<i>...</i>");

my $next2_alt = $next2_txt;
my $prev2_alt = $prev2_txt;
my $next_alt = $next_txt;
my $prev_alt = $prev_txt;
my $list_alt = $list_txt;
my $home_alt = $home_txt;
my $end_alt = $end_txt;
my $galerie_alt = $galerie_txt;
my $backalt = $backtxt;
my $backalt2 = $backtxt2;
my $diapostart_alt = $diapostart_txt;
my $diapostop_alt = $diapostop_txt;

my $blank_txt;

if($use_ico > 1){
    $next_txt = "<img src=\"$galrep/$repico_base/$next_ico\" border=0 alt=\"$next_txt\">";
    $prev_txt = "<img src=\"$galrep/$repico_base/$prev_ico\" border=0 alt=\"$prev_txt\">";
    $next2_txt = "<img src=\"$galrep/$repico_base/$next2_ico\" border=0 alt=\"$next2_txt\">";
    $prev2_txt = "<img src=\"$galrep/$repico_base/$prev2_ico\" border=0 alt=\"$prev2_txt\">";
    $list_txt = "<img src=\"$galrep/$repico_base/$list_ico\" border=0 alt=\"$list_txt\">";
    $home_txt = "<img src=\"$galrep/$repico_base/$home_ico\" border=0 alt=\"$home_txt\">";
    $end_txt = "<img src=\"$galrep/$repico_base/$end_ico\" border=0 alt=\"$end_txt\">";
    if($galerie_txt){$galerie_txt = "<img src=\"$galrep/$repico_base/$galerie_ico\" border=0 alt=\"$galerie_txt\">";}
    if($backurl){$backtxt = "<img src=\"$galrep/$repico_base/$list_ico\" border=0 alt=\"$backtxt\">";}
    if($backurl2){$backtxt2 = "<img src=\"$galrep/$repico_base/$list_ico\" border=0 alt=\"$backtxt2\">";}
    $blank_txt = "<img src=\"$galrep/$repico_base/$blank_ico\" border=0 alt=\"...\">";
    $diapostart_txt = "<img src=\"$galrep/$repico_base/$play_ico\" border=0 alt=\"$diapostart_txt\">";
    $diapostop_txt = "<img src=\"$galrep/$repico_base/$pause_ico\" border=0 alt=\"$diapostop_txt\">";
    ($next_txt2,$prev_txt2,$next2_txt2,$prev2_txt2,$list_txt2,$home_txt2,$end_txt2,$galerie_txt2) = ($blank_txt,$blank_txt,$blank_txt,$blank_txt,$blank_txt,$blank_txt,$blank_txt,$blank_txt,);
}

if (!$defautformat){
    $defautformat = 1;
}
my $diapo = "";
if (!$format){
    $format = $defautformat;
}
elsif ($format == 100){
    $format = 100+$defautformat;
}
elsif ($format > 1000){
    $format = $format-1000;
    $diapo = 1;
}

my $tableHW;
## $tableHmax est définit par constante utilisateur
if ($xmini){
    $tableHW = "height=\"".($xmini+10)."\"";
    $tableHmax = $xmini;
}
elsif ($mini){
    my ($tableW,$tableH) = split(/x/, $mini);
    $tableHW = "width=".($tableW+10)." height=".($tableH+10)."";
    $tableHmax = $tableH;
}

my $nobig=0;
if($screen =~ /X/){
    $screen =~ s/X/x/;
    $nobig = 1;
}

if (!$back_url){
    $back_txt = "";
}
else{
    if (!$back_txt){
	$back_txt = $back_url;
    }
}

if (!$backurl){
    $backtxt = "";
}

if (!$backurl2){
    $backtxt2 = "";
}

if (!$galerie_title){
    $galerie_title = $galerie_txt;
}

my $max = 9999;
if (!$max_image){
    $max_image = $max;
}
my $rep;
if ($request eq ".index"){
    $rep = "$galrep";
}
else{
    $rep = "$galrep/$request";
}

if($HEADER){
    if(-e "$rep/$HEADER"){$HEADER = "$rep/$HEADER";}
    elsif(-e "$galrep/$HEADER"){$HEADER = "$galrep/$HEADER";}
    else{$HEADER = "";}
}
if($FOOTER){
    if(-e "$rep/$FOOTER"){$FOOTER = "$rep/$FOOTER";}
    elsif(-e "$galrep/$FOOTER"){$FOOTER = "$galrep/$FOOTER";}
    else{$FOOTER = "";}
}
if($CSS){
    if(-e "$rep/$CSS"){$CSS = "$rep/$CSS";}
    elsif(-e "$galrep/$CSS"){$CSS = "$galrep/$CSS";}
    else{$CSS = "";}
}

my ($repmini,$repscreen);

my ($title,$file,$image,$x);

my $cmp = 0; ## formatage retour a la ligne
my $cmprep; ## total image du repertoire
my $cmpimg = 0; ## compteur des image lues
my $cmpimage; ## depart du comptage ($comp est le parametre d appel)
if ($comp){
    $cmpimage = $comp;
}
else{
    $cmpimage = 1;
}
my @rep_work = glob("$rep/*");
## recuperation des images du repertoire
my @rep;
foreach $file(@rep_work){
    if ($file =~ /.([jJ][pP][eE]?[gG]|[gG][iI][fF]|[pP][nN][gG])$/){
	$cmprep++;
	push(@rep, $file);
    }
}
if($use_alpha == 1){
    @rep = sort{lc($a) cmp lc($b)}(@rep);
}
elsif($use_alpha == 2){
    @rep = sort{lc($b) cmp lc($a)}(@rep);
}
elsif($use_alpha == 3){
    @rep = sort(@rep);
}
elsif($use_alpha == 4){
    @rep = sort{$a<=>$b}(@rep);
}
elsif($use_alpha == 5){
    @rep = sort{$b<=>$a}(@rep);
}
elsif($use_alpha > 5){
    my @temp;
    my $shuf = $use_alpha-5;
    while($shuf){
	while(@rep){
	    push(@temp, pop(@rep));
	    if(@rep){
		push(@temp, shift(@rep));
	    }
	}
	@rep = @temp;
	if ($shuf%2){
	    @rep = reverse(@rep);
	}
	@temp = ();
	$shuf--;
    }
}

my ($next,$prev,$list,$home,$end,$page_idx,$diapostart,$diapostop);

my ($starttxt,$endtxt);
if($use_ico > 1){
    $starttxt = $blank_txt;
    $endtxt = $blank_txt;
}
else{
    $starttxt = " [";
    $endtxt = "] ";
}

#########################################################################
#### main prog

if($request eq ".index"){
    if($multirep){
	$title = $galerie_title;
	$title =~ s/_/ /g;
	if ($backtxt){
	    $sub_title = " $starttxt<a href=\"$backurl\" target=\"_top\">$backtxt</a>$endtxt ";
	}
	$request = "";
	printhead();
	index_gal();
	printfoot();
    }
    else{
	$title = $errmsg;
	printhead();
	printfoot();
    }
}
elsif($request){
    init_rep();
    purge();
    renew();
    create_rep();
    if ($gal_title){
	$title = $gal_title;
    }
    else{
	$title = $request;
	$title = lc($title);
	$title =~ s/-|_/ /g;
    }
    do_bouton();
    printhead();
    if (($format ne ".new") and ($format ne ".purge") and ($format ne ".create")){
	printit();
    }
    printfoot();
    purge_img();
    purge_rep();
}
else{
    print "\n$version\n\n";
}


#########################################################################
#### routines

## affichage head
sub printhead{
    if($html){
	print "Content-type: text/html\n\n";
    }
    if($HEADER){
	open(FILE, "$HEADER");
	my @file = <FILE>;
	close(FILE);
	foreach(@file){
	    $_ =~ s/\[\[DIAPORAMA\]\]/$diapo/g;
	    $_ =~ s/\[\[TITRE\]\]/$title/g;
	    $_ =~ s/\[\[STITRE\]\]/$sub_title/g;
	    $_ =~ s/\[\[SIGNATURE\]\]/$SIGNATURE/g;
	    $_ =~ s/\[\[ADMIN\]\]/$ADMIN/g;
	    print $_;
	}
    }
    else{
	print "<HTML>\n";
	print "<HEAD>\n";
	print "<TITLE>$title</TITLE>\n";
	if($diapo){
	    print "$diapo\n";
	}
	if($CSS){
	    print "<link rel=\"stylesheet\" href=\"$CSS\" type=\"text/css\">\n";
	}
	print "</HEAD>\n";
        print "$BODY\n";
	print "$FONT\n";
    
	print "<DIV ALIGN=\"center\">";
	print "<h1>$title</h1>";
	if ($sub_title){
	    print "<font size=\"-1\">$sub_title<br><br></font>";
	}
    }
    if ($request){
        print "\n$home$prev$list$diapostart$diapostop$next$end\n";
        print "<br>\n";
	if (($cmpimage <= $cmprep) and ($format > 99)){
    	    print "<font size=\"-1\">";
    	    print "($cmpimage/$cmprep)";
	    if($diapo){
		print " - (diaporama/$diapowait \sec.)\n";
	    }
    	    print "</font>";
	}
	else{
    	    print "<font size=\"-1\">";
    	    print "$page_idx\n";
    	    print "</font>";
	}
        print "<br>\n";
    }
}

## affichage main
sub printit{
    if ((($format > 2) and ($format < 101)) or ($format > 102)){
        if ($use_sample == 3){
	    print "<TABLE BGCOLOR=\"$TABLEcolor\" cellpadding=1 cellspacing=0 width=\"90%\"><tr><td>\n";
	    print "<TABLE BGCOLOR=\"$TDcolor\" width=\"100%\" cellpadding=5 cellspacing=5><TR>\n";
	}
	else{
	    print "<TABLE BGCOLOR=\"$TABLEcolor\" width=\"80%\" cellpadding=5 cellspacing=5><TR>\n";
	}
    }

    if (($format == 2) or ($format == 102)){
	print "<TABLE BGCOLOR=\"$TDcolor\" width=\"80%\" cellpadding=5 cellspacing=5><TR>\n";
	print "<TD ALIGN=\"center\">\n";
    }
    
    if ($format > 102){
	print "<TD ALIGN=\"center\">\n";
        if ($use_sample == 3){
	    print "<TABLE BGCOLOR=\"$BODYcolor\" width=\"90%\" cellpadding=2 cellspacing=2>\n";
	}
        elsif ($use_sample == 2){
    	    print "<br><TABLE BGCOLOR=\"$TDcolor\" cellpadding=2 cellspacing=2>\n";
	}
	else{
	    print "<TABLE BGCOLOR=\"$TDcolor\" width=\"90%\" cellpadding=2 cellspacing=2>\n";
	}
	print "<TR><TD ALIGN=\"center\" width=\"100%\">\n";
    }

    if ($format > 99){
	while((@rep) and (($cmp == 0) or ($cmpimg == $cmpimage))){
	    
	    $file = shift(@rep);
	    $cmpimg++;
	    
	    if ($cmpimg == $cmpimage){
		$cmp++;
		my $filename = $file;
		my $screenfile;
		if($xscreen){
		    $screenfile = $filename;
		    $filename =~ s/$rep\///;
		}
		else{
		    $filename =~ s/$rep\///;
		    $screenfile = $repscreen."/".$filename;
		
		    if (($screen) and (!-e $screenfile)){
			$image = Image::Magick->new;
			$image->Read($file);
			$image->Scale(geometry=>"$screen");
			$image->Write("$screenfile");
		    }		
		}
		if(($use_text == 2) or ($use_text == 3) or ($use_text == 4) or ($use_text == 5)){
		    my $legend = legend($filename);
		    if($legend){
			if($format == 101){
			    print "<br>\n";
			    print "<i>$legend</i>\n";
			    print "<br>\n";
			}
			if($format == 102){
			    print "<TABLE BGCOLOR=\"$TDcolor\" width=\"90%\" cellpadding=2 cellspacing=2>\n";
			    print "<TR><TD ALIGN=\"center\">\n";
			    print "<i>$legend</i>";
			    print "</TD></TR></TABLE>\n";
			}
			if($format > 102){
			    print "<i>$legend</i></TD></TR></TABLE>";
    			    if ($use_sample == 3){
				print "<TABLE BGCOLOR=\"$BODYcolor\" width=\"90%\" cellpadding=2 cellspacing=2>\n";
			    }
    			    elsif ($use_sample == 2){
				print "<br><TABLE BGCOLOR=\"$TDcolor\" cellpadding=2 cellspacing=2>\n";
			    }
    			    else{
				print "<TABLE BGCOLOR=\"$TDcolor\" width=\"90%\" cellpadding=2 cellspacing=2>\n";
			    }
			    print "<TR><TD ALIGN=\"center\" width=\"100%\">\n";
			}
		    }
		}
		if($xscreen > 1){
		    if($nobig){
			print "<img src=\"$screenfile\" width=\"$xscreen\" alt=\"...\">\n";
		    }
		    else{
			print "<a href=\"$file\" target=\"_blank\"><img src=\"$screenfile\" border=0 width=\"$xscreen\" alt=\"format original\"></a>\n";
		    }
		}
		elsif($xscreen == 1){
		    print "<img src=\"$screenfile\" border=0 alt=\"format original\">\n";
		}
		else{
		    if($nobig){
			print "<img src=\"$screenfile\" alt=\"...\">\n";
		    }
		    else{
			print "<a href=\"$file\" target=\"_blank\"><img src=\"$screenfile\" border=0 alt=\"format original\"></a>\n";
		    }
		}
	    }
	}
    }
    else{
	while((@rep) and (($cmp == 0) or ($cmp%$max_image))){
	    
	    $file = shift(@rep);
	    $cmpimg++;
	    
	    if (($max_image == $max) or ($cmpimg >= $cmpimage)) {
		$cmp++;
		my $filename = $file;
		$filename =~ s/$rep\///;
		my $filenamecomplet = $filename;
		my $minifile = $repmini."/".$filename;
		$filename =~ s/\.(.*)$//;
		$filename =~ s/_/ /g;
		
		if ((!-e $minifile) and ($mini)){
		    $image = Image::Magick->new;
		    $image->Read($file);
		    $image->Scale(geometry=>"$mini");
		    $image->Write("$minifile");
		}

		if ($format > 2){
		    print "<TD ALIGN=\"center\">\n";
		    
		    if ($use_sample == 2){
			print "<TABLE BGCOLOR=\"$TDcolor\" cellpadding=2 cellspacing=2>\n";
		    }
		    elsif ($use_sample == 3){
			print "<TABLE BGCOLOR=\"$TABLEcolor\" $tableHW cellpadding=1 cellspacing=0><tr><td>\n";
			print "<TABLE BGCOLOR=\"$BODYcolor\" cellpadding=2 cellspacing=2 width=\"100%\" height=\"100%\">\n";
		    }
		    else{
			print "<TABLE BGCOLOR=\"$TDcolor\" cellpadding=2 cellspacing=2 width=\"100%\">\n";
		    }
		    print "<TR>\n";
		    print "<TD ALIGN=\"center\">\n";
		}
		
		if (($screen) or ($xscreen)){
		    print "<a href=\"$script?$request\@\@".($format+100)."\@\@$cmpimg\">";
		}
		else{
		    print "<a href=\"$file\" target=\"_blank\">";
		}
		if (($mini) and ($use_sample)){
		    print "<img src=\"$minifile\" border=0></a>\n";
		}
		elsif ($use_sample){
		    if ($xmini){
			print "<img src=\"$file\" height=\"$xmini\" border=0></a>\n";
		    }
		    else{
			print "<img src=\"$file\" border=0></a>\n";
		    }
		}
		else{
		    print "$filename</a><br>\n";
		    if(($use_text == 3) or ($use_text == 4)){
			my $legend = legend($filenamecomplet);
			if($legend){
			    print "<font size=\"-1\"><i>$legend</i></font><br>\n";
			}
		    }
		}
		if ($format > 2){
		    if ((($use_text==1) or ($use_text==3) or ($use_text == 4)) and ($use_sample)){
			print "</TD>\n";
			print "</TR>\n";
			print "<TR>\n";
			print "<TD ALIGN=\"center\">\n";
			if(($use_text == 3) or ($use_text == 4)){
			    my $legend = legend($filenamecomplet);
			    if($legend){
				print "<font size=\"-1\"><i>$legend</i></font><br>\n";
			    }
			}
			print "<font size=\"-1\">$filename</font>\n";
		    }
		    print "</TD>\n";
		    print "</TR>\n";
		    print "</TABLE>\n";
		    if ($use_sample == 3){
			print "</td></tr></TABLE>\n";
		    }
		    
		    print "</TD>\n";
		    
		    if($cmp%$format==0){
			print "</TR>\n";
			print "<TR>\n";
		    }
		}
	    }
	}
    }
    if ($format > 102){
	print "\n";
	print "</TD>\n";
	print "</TR>\n";
	print "</TABLE>\n";
    }
    if ((($format > 1) and ($format < 101)) or ($format > 101)){
	print "</TD>\n";
	print "</TR>\n";
	print "</TABLE>\n";
        if ($use_sample == 3){
	    print "</td></tr></TABLE>\n";
	}
    }
    else{
	print "<br>\n";
    }
}

## affichage foot
sub printfoot{
    if (!$cmp){
        print "<h3>$errmsg</h3>";
    }
    
    if ($request){
        print "\n<br>\n";
        print "$home$prev$list$diapostart$diapostop$next$end";
        print "\n<br><br>\n";
    }
    if($FOOTER){
	open(FILE, "$FOOTER");
	my @file = <FILE>;
	close(FILE);
	foreach(@file){
	    $_ =~ s/\[\[TITRE\]\]/$title/g;
	    $_ =~ s/\[\[STITRE\]\]/$sub_title/g;
	    $_ =~ s/\[\[SIGNATURE\]\]/$SIGNATURE/g;
	    $_ =~ s/\[\[ADMIN\]\]/$ADMIN/g;
	    print $_;
	}
    }
    else{
	print "<hr width=\"90\%\">";
	print "<font size=\"-2\">";
	print "$SIGNATURE";
	print " / ";
	print "$ADMIN";
	print "</font>";
	print "<br><br>";
	print "</DIV>";
	if ($FONT){
	    print "</FONT>\n";
	}
	print "</BODY>\n";
	print "</HTML>\n";
    }
}

## purge mini/screen
sub purge{
    if($format eq ".purge"){
	if(($password) and ($comp eq $password)){
	    while($file = <$repmini/*>){
		unlink($file);
	    }
	    while($file = <$repscreen/*>){
		unlink($file);
	    }
	    $errmsg = "[ <a href=\"$script?$request\">OK</a> ]";
	}
	else{
	    $errmsg = "[ erreur mot de passe ]";
	}
	$cmpimage = $max;
    }
}

## purge et renouvelle mini et screen
sub renew{
    if($format eq ".new"){
	if(($password) and ($comp eq $password)){
	    while(@rep){
		$file = shift(@rep);
		my $filename = $file;
		$filename =~ s/$rep\///;
		if(($screen) and (!$xscreen)){
		    my $screenfile = $repscreen."/".$filename;
		    if (!-e $screenfile){
			$image = Image::Magick->new;
			$image->Read($file);
			$image->Scale(geometry=>"$screen");
			$image->Write("$screenfile");
		    }
		}
		my $minifile = $repmini."/".$filename;
		if ((!-e $minifile) and ($mini)){
		    $image = Image::Magick->new;
		    $image->Read($file);
		    $image->Scale(geometry=>"$mini");
		    $image->Write("$minifile");
		}
	    }
	    $errmsg = "[ <a href=\"$script?$request\">OK</a> ]";
	}
	else{
	    $errmsg = "[ erreur mot de passe ]";
	}
	$cmpimage = $max;
    }
}

## purge images supprimees
sub purge_img{
    while($file = <$repmini/*>){
	my $realfile = $file;
	$realfile =~ s/$repmini/$rep/;
	my $screenfile = $file;
	$screenfile =~ s/$repmini/$repscreen/;
	if (!-e $realfile){
	    unlink($file);
	    if (-e $screenfile){
		unlink($screenfile);
	    }
	}
    }
}

## purge repertoire
sub purge_rep{
    if ($format ne ".create"){
	rmdir("$repmini");
	rmdir("$repscreen");
	rmdir("$rep");
	if (!-d "$rep"){
	    unlink("$rep.conf");
	    unlink("$rep.txt");
	}
    }
}

## init repertoire
sub init_rep{
    if ($repmini_base){
	$repmini = $repmini_base."/".$request."_mini";
    }
    else{
	$repmini = $rep."/mini";
    }
    if ($repscreen_base){
	$repscreen = $repscreen_base."/".$request."_screen";
    }
    else{
	$repscreen = $rep."/screen";
    }
    if (!-e "$repmini"){
	mkdir("$repmini", 0755);
    }
    if (($screen) and (!$xscreen) and (!-e "$repscreen")){
	mkdir("$repscreen", 0755);
    }
}

sub create_rep{
    if(($format eq ".create") and ($multirep)){
	if(($password) and ($comp eq $password)){
	    if (!-d "$rep"){
	    	mkdir($rep);
#		$errmsg = "[ <a href=\"$script?.index\">OK</a> ]";
		$errmsg = "[ $ADMIN ]";
	    }
	    else{
		$errmsg = "[ erreur nom de repertoire ]";
	    }
	}
	else{
	    $errmsg = "[ erreur mot de passe ]";
	}
	$cmpimage = $max;
    }
}

## presente les repertoires gallerie
sub index_gal{
    my @rep_gal_work = glob("$galrep/*");
## recuperation des repertoires
    my @rep_gal;
    foreach my $gal(@rep_gal_work){
	if (-d $gal){
	    my $galname = $gal;
	    $galname =~ s/$galrep\///;
	    my @rep_work = glob("$gal/*");
## recuperation des images du repertoire
	    my @rep;
	    my $cmprep = 0;
	    my $random = (rand(scalar(@rep_work)-1))+1;
	    if ($repmini_base){
		$repmini = $repmini_base."/".$galname."_mini";
	    }
	    else{
		$repmini = $rep."/$galname/mini";
	    }
	    my $sample;
	    foreach my $file(@rep_work){
		if ($file =~ /.([jJ][pP][eE]?[gG]|[gG][iI][fF]|[pP][nN][gG])$/){
		    $cmprep++;
		    my $samplefile = $file;
		    if($use_order == 1){
			$samplefile =~ s/$gal/$repmini/;
			if(($xmini) or (!-d $repmini)){
			    $sample = $file;
			}
			elsif(-e "$samplefile"){
			    $sample = $samplefile;
			}
		    }
		    elsif($use_order == 2){
			if(!$sample){
			    $samplefile =~ s/$gal/$repmini/;
			    if(($xmini) or (!-d $repmini)){
				$sample = $file;
			    }
			    elsif(-e "$samplefile"){
				$sample = $samplefile;
			    }
			}
		    }
		    elsif($use_order == 3){
			if($cmprep < $random){
			    $samplefile =~ s/$gal/$repmini/;
			    if(($xmini) or (!-d $repmini)){
				$sample = $file;
			    }
			    elsif(-e "$samplefile"){
				$sample = $samplefile;
			    }
			}
		    }
		}
	    }
	    my($gal_title,$gal_subtitle);
	    if (-e "$galrep/$galname.conf"){
		require("$galrep/$galname.conf");
		($gal_title,$gal_subtitle) = init3();
	    }
	    my $link_title;
	    if($gal_title){
		$link_title = $gal_title;
	    }
	    else{
		$link_title = $galname;
		$link_title =~ s/_/ /g;
	    }
	    push(@rep_gal, "$link_title\t$galname\t$cmprep\t$sample\t$gal_subtitle");
	}
    }
    if($use_alpha == 1){
	@rep_gal = sort{lc($a) cmp lc($b)}(@rep_gal);
    }
    elsif($use_alpha == 2){
	@rep_gal = sort{lc($b) cmp lc($a)}(@rep_gal);
    }
    elsif($use_alpha == 3){
	@rep_gal = sort(@rep_gal);
    }
    elsif($use_alpha == 4){
	@rep_gal = sort{$a<=>$b}(@rep_gal);
    }
    elsif($use_alpha == 5){
	@rep_gal = sort{$b<=>$a}(@rep_gal);
    }
    elsif($use_alpha > 5){
	my @temp;
	my $shuf = $use_alpha-5;
        while($shuf){
	    while(@rep_gal){
		push(@temp, pop(@rep_gal));
		if(@rep_gal){
		    push(@temp, shift(@rep_gal));
		}
	    }
	    @rep_gal = @temp;
	    if ($shuf%2){
		@rep_gal = reverse(@rep_gal);
	    }
	    @temp = ();
	    $shuf--;
	}
    }
    $cmp = 0;
    $cmpimg = 0;
    if($format>$max_image){
	$max_image=$format;
    }
    if($cmpimage =~ m/^\./){
	$cmpimage =~ s/^\.//;
	my $test = 1;
	foreach my $linetest(@rep_gal){
	    my @linetest = split(/\t/, $linetest);
	    if ($linetest[1] eq $cmpimage){
		$cmpimage = $test;
	    }
	    else{
		$test++;
	    }
	}
    }
    if($cmpimage > @rep_gal){
	$cmpimage = 1;
    }
    if((($cmpimage%$max_image)==0) or (($cmpimage%$max_image)>1)){
	while(($cmpimage%$max_image)!=1){
	    $cmpimage--;
	}
    }
    if(@rep_gal>$max_image){
	print "<table cellpadding=0 cellspacing=0 width=\"80%\"><tr><td align=\"center\"> \n";
	if(($use_ico == 1) or ($use_ico == 3)){
	    print "index: ";
	}
	my $indexcmp = 1;
	while($indexcmp<=@rep_gal){
	    if($cmpimage==$indexcmp){
		if(($use_ico == 1) or ($use_ico == 3)){
		    print "[<b>".((int($indexcmp/$max_image))+1)."</b>]&nbsp;";
		}
		else{
		    print "[<b>index&nbsp;".((int($indexcmp/$max_image))+1)."</b>]&nbsp;";
		}
	    }
	    else{
		if(($use_ico == 1) or ($use_ico == 3)){
		    print "[<a href=\"$script?.index\@\@$format\@\@$indexcmp\">".((int($indexcmp/$max_image))+1)."</a>] ";
		}
		else{
		    print "[<a href=\"$script?.index\@\@$format\@\@$indexcmp\">index&nbsp;".((int($indexcmp/$max_image))+1)."</a>] ";
		}
	    }
	    $indexcmp = $indexcmp + $max_image;
	}
	print "</table></td></tr>\n";
    }
    else{
	print "<br>\n";
    }
    if($format>1){
        if (($format > 2) and ($use_sample == 3)){
	    print "<TABLE BGCOLOR=\"$TABLEcolor\" cellpadding=1 cellspacing=0 width=\"90%\"><tr><td>\n";
	    print "<TABLE BGCOLOR=\"$TDcolor\" width=\"100%\" cellpadding=5 cellspacing=5><TR>\n";
	}
	elsif($format == 2){
	    print "<TABLE BGCOLOR=\"$TDcolor\" width=\"90%\" cellpadding=5 cellspacing=5><TR>\n";
	}
	else{
	    print "<TABLE BGCOLOR=\"$TABLEcolor\" width=\"90%\" cellpadding=5 cellspacing=5><TR>\n";
	}
    }
    foreach my $line(@rep_gal){
	while((@rep_gal) and (($cmp == 0) or ($cmpimg%$max_image))){
	    $line = shift(@rep_gal);
	    $cmpimg++;
	    if($cmpimg>=$cmpimage){
		$cmp++;
		my @line = split(/\t/, $line);
		my $link_subtitle;
		if($line[4]){
		    $link_subtitle = $line[4];
		}
		else{
		    $link_subtitle = "";
		}
		if($format < 2){
		    print "<br>\n";
		    print "<font size=\"+2\"><li><a href=\"$script?$line[1]\">$line[0]</a><br>\n";
		    if (($use_text == 1) or ($use_text > 3)){
			print "<font size=\"+0\">\n";
			if($link_subtitle){
			    print "<i>$link_subtitle</i><br>\n";
			}
			print "(@line[2] images)<br></font>\n";
		    }
		    print "</font>\n";
		    if(($line[3]) and ($use_sample)){
			if($xmini){
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 height=$xmini></a>\n";
			}
			elsif ($line[3] =~ /[\/\_]mini\//){
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0></a>\n";
			}
			else{
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 height=$tableHmax></a>\n";
			}
		    }
		}
		elsif($format == 2){
		    print "<TD ALIGN=\"right\" width=\"50%\" bgcolor=\"$TDcolor\">\n";
		    print "<font size=\"+2\"><li><a href=\"$script?$line[1]\">$line[0]</a><br>\n";
		    if (($use_text == 1) or ($use_text > 3)){
			print "<font size=\"+0\">\n";
			if($link_subtitle){
			    print "<i>$link_subtitle</i><br>\n";
			}
			print "(@line[2] images)<br></font>\n";
		    }
		    print "</font>\n";
		    print "</td>\n<td align=\"left\" width=\"50%\" bgcolor=\"$TDcolor\">\n";
		    if(($line[3]) and ($use_sample)){
			if($xmini){
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 height=$xmini></a>\n";
			}
			elsif ($line[3] =~ /[\/\_]mini\//){
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0></a>\n";
			}
			else{
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 height=$tableHmax></a>\n";
			}
		    }
		    print "</TD></TR><TR>\n"
		}
		else{ ## format > 2
		    print "<TD ALIGN=\"center\">\n";
		    if ($use_sample == 3){
			print "<TABLE BGCOLOR=\"$TABLEcolor\" $tableHW cellpadding=1 cellspacing=0><tr><td>\n";
			print "<TABLE BGCOLOR=\"$BODYcolor\" cellpadding=2 cellspacing=2 width=\"100%\" height=\"100%\">\n";
		    }
		    elsif ($use_sample == 2){
			print "<TABLE BGCOLOR=\"$TDcolor\" cellpadding=2 cellspacing=2>\n";
		    }
		    else{
			print "<TABLE BGCOLOR=\"$TDcolor\" cellpadding=2 cellspacing=2 width=\"100%\">\n";
		    }
		    print "<TR>\n";
		    print "<TD ALIGN=\"center\">\n";
		    if ($use_text){
			print "<font size=\"+1\"><a href=\"$script?$line[1]\">$line[0]</a></font><br>\n";
		    }
		    if(($line[3]) and ($use_sample)){
			if($xmini){
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 height=$xmini align=\"center\"></a><br>\n";
			}
			elsif ($line[3] =~ /[\/\_]mini\//){
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 align=\"center\"></a><br>\n";
			}
			else{
			    print "<a href=\"$script?$line[1]\"><img src=\"$line[3]\" border=0 align=\"center\" height=$tableHmax></a><br>\n";
			}
		    }
		    if (($use_text == 1) or ($use_text > 3)){
			print "<font size=\"+0\">\n";
			if($link_subtitle){
			    print "<i>$link_subtitle</i><br>\n";
			}
			print "(@line[2] images)<br></font>\n";
		    }
		}
		if ($format > 2){
		    print "</TD>\n";
		    print "</TR>\n";
		    print "</TABLE>\n";
		    if ($use_sample == 3){
			print "</td></tr></TABLE>\n";
		    }
		    
		    print "</TD>\n";
		    
		    if($cmp%$format==0){
			print "</TR>\n";
			print "<TR>\n";
		    }
		}
	    }
	}
    }
    if ($format > 1){
	print "</TD>\n";
	print "</TR>\n";
	print "</TABLE>\n";
        if ($use_sample == 3){
	    print "</td></tr></TABLE>\n";
	}
    }
    else{
	print "<br>\n";
    }
    print "<br><br>";
}

## prepare les boutons de navigation
sub do_bouton{
    if ($format > 99){
	if ($diapowait){
	    if ($diapo){
		if (($cmpimage) and ($cmpimage == $cmprep)){
		    $diapo = "<META HTTP-EQUIV=\"refresh\" content=\"$diapowait;URL=$script?$request\@\@".($format+1000)."\@\@".(1)."\">";
		    $diapostop = "$starttxt<a href=\"$script?$request\@\@$format\@\@".$cmpimage."\" title=\"$diapostop_alt\">$diapostop_txt</a>$endtxt";
		}
		elsif (($cmpimage) and ($cmpimage < $cmprep)){
		    $diapo = "<META HTTP-EQUIV=\"refresh\" content=\"$diapowait;URL=$script?$request\@\@".($format+1000)."\@\@".($cmpimage+1)."\">";
		    $diapostop = "$starttxt<a href=\"$script?$request\@\@$format\@\@".$cmpimage."\" title=\"$diapostop_alt\">$diapostop_txt</a>$endtxt";
		}
	    }
	    else{
		if (($cmpimage) and ($cmpimage <= $cmprep)){
		    $diapostart = "$starttxt<a href=\"$script?$request\@\@".($format+1000)."\@\@".$cmpimage."\" title=\"$diapostart_alt\">$diapostart_txt</a>$endtxt";
		}
	    }
	}
	if (($cmpimage > 1) and ($cmpimage <= $cmprep)){
	    $home = "$starttxt<a href=\"$script?$request\@\@$format\@\@".(1)."\" title=\"$home_alt\">$home_txt</a>$endtxt";
	}
        else{
	    $home = "$starttxt$home_txt2$endtxt";
	}
	if (($cmpimage > 1) and ($cmpimage <= $cmprep)){
    	    $prev = "$starttxt<a href=\"$script?$request\@\@$format\@\@".($cmpimage-1)."\" title=\"$prev_alt\">$prev_txt</a>$endtxt";
	}
	else{
	    $prev = "$starttxt$prev_txt2$endtxt";
	}
	if (($cmpimage) and ($cmpimage <= $cmprep)){
    	    $list = "$starttxt<a href=\"$script?$request\@\@".($format-100)."\@\@".(((int(($cmpimage-1)/$max_image))*$max_image)+1)."\" title=\"$list_alt\">$list_txt</a>$endtxt";
	}
        else{
	    $list = "$starttxt$list_txt2$endtxt";
	}
	if (($cmpimage) and ($cmpimage < $cmprep)){
	    $next = "$starttxt<a href=\"$script?$request\@\@$format\@\@".($cmpimage+1)."\" title=\"$next_alt\">$next_txt</a>$endtxt";
	}
	else{
	    $next = "$starttxt$next_txt2$endtxt";
	}
	if (($cmpimage) and ($cmpimage < $cmprep)){
	    $end = "$starttxt<a href=\"$script?$request\@\@$format\@\@".($cmprep)."\" title=\"$end_alt\">$end_txt</a>$endtxt";
	}
	else{
	    $end = "$starttxt$end_txt2$endtxt";
	}
    }
    else{
	if (($cmpimage > 1) and ($cmpimage <= $cmprep)){
    	    $home = "$starttxt<a href=\"$script?$request\@\@$format\@\@".(1)."\" title=\"$home_alt\">$home_txt</a>$endtxt";
	}
	elsif($max_image != $max){
	    $home = "$starttxt$home_txt2$endtxt";
	}
	if (($cmpimage > $max_image) and ($cmpimage <= $cmprep)){
	    $prev = "$starttxt<a href=\"$script?$request\@\@$format\@\@".(((int(($cmpimage-$max_image-1)/$max_image))*$max_image)+1)."\" title=\"$prev2_alt\">$prev2_txt</a>$endtxt";
	}
	elsif($max_image != $max){
	    $prev = "$starttxt$prev2_txt2$endtxt";
	}
	if ($backtxt2){
	    $list = "$starttxt<a href=\"$backurl2\" target=\"_top\" title=\"$backalt2\">$backtxt2</a>$endtxt";
	}
	elsif (($multirep) and ($galerie_txt)){
	    $list = "$starttxt<a href=\"$script?.index\@\@\@\@.$request\" title=\"$galerie_alt\">$galerie_txt</a>$endtxt";
	}
	elsif ($backtxt){
	    $list = "$starttxt<a href=\"$backurl\" target=\"_top\" title=\"$backalt\">$backtxt</a>$endtxt";
	}
	else{
    	    $list = "$galerie_txt2";
	}
	if (($cmpimage+$max_image) <= $cmprep){
	    $next = "$starttxt<a href=\"$script?$request\@\@$format\@\@".(((int(($cmpimage+$max_image-1)/$max_image))*$max_image)+1)."\" title=\"$next2_alt\">$next2_txt</a>$endtxt";
	}
	elsif($max_image != $max){
	    $next = "$starttxt$next2_txt2$endtxt";
	}
	if (($cmpimage) and ($cmpimage < (((int(($cmprep-1)/$max_image))*$max_image)+1))){
		$end = "$starttxt<a href=\"$script?$request\@\@$format\@\@".(((int(($cmprep-1)/$max_image))*$max_image)+1)."\" title=\"$end_alt\">$end_txt</a>$endtxt";
	}
	elsif($max_image != $max){
	    $end = "$starttxt$end_txt2$endtxt";
	}
	if (($format ne ".new") and ($format ne ".purge") and ($format ne ".create")){
	    if (($pagemax) and ($max_image) and ((int(@rep/($max_image+1)))>=1)){
		my $test=1;
		my $pagenum=1;
		my $pagemaxtemoin = $pagemax;
		my $depassement = 0;
		if((@rep%$max_image)){$depassement = 1;}
	    ## nb de page : (int(@rep/$max_image)+$depassement);
	    #décalage necessaire : ((int(@rep/$max_image)+$depassement)-$pagemax);
	    #je suis sur la page : ".(int($cmpimage/$max_image)+1)."<br>";
		if($cmpimage > ($max_image*($pagemax-1))){
		    while(((($cmpimage/$max_image)-$pagenum)>1) and ($pagemax < (int(@rep/$max_image)+$depassement))){
			$pagenum++;
			$pagemax++;
			$test = $test + $max_image;
		    }
		}
		$page_idx = $page_idx."<br>[".(int(@rep/$max_image)+$depassement)."&nbsp;pages]&nbsp;&nbsp;&nbsp;&nbsp;";
		if($pagenum > 1){
		    if (($test-($max_image*$pagemaxtemoin))>=0){
		    $page_idx = $page_idx." [<a href=\"$script?$request\@\@$format\@\@".($cmpimage-($max_image*$pagemaxtemoin))."\">...</a>]";
		    }
		    else{
		    $page_idx = $page_idx." [<a href=\"$script?$request\@\@$format\@\@".(1)."\">...</a>]";
#		    $page_idx = $page_idx." [..]";
		    }
		}
		while(($test <= @rep) and ($pagenum <= $pagemax)){
		    if($test == $cmpimage){
			$page_idx = $page_idx." [<b>$pagenum</b>]";
		    }
		    else{
			$page_idx = $page_idx." [<a href=\"$script?$request\@\@$format\@\@$test\">$pagenum</a>]";
		    }
		    $test = $test + $max_image;
		    $pagenum++;
		}
		if(($test <= @rep) and ($pagenum == $pagemax+1)){
		    $page_idx = $page_idx." [<a href=\"$script?$request\@\@$format\@\@".($test)."\">...</a>]";
#		    $page_idx = $page_idx." [..]";
		}
		$page_idx = $page_idx." &nbsp;&nbsp;&nbsp;&nbsp;[".scalar(@rep)."&nbsp;images]";
		$page_idx = "<font size=\"-1\">".$page_idx."</font>";
	    }
	}
    }
}

sub legend{
    my $image = @_[0];
    my $filename = $image;
    $filename =~ s/$rep\///;
    my @textimg;
    if (($request) and (-e "$galrep/$request.txt")){
	open(FILE, "$galrep/$request.txt");
	@textimg = <FILE>;
	close(FILE);
	foreach my $line(@textimg){
	    chomp($line);
	    my @line = split(/\t/, $line);
	    if ($line[0] eq $image){
		return($line[1]);
	    }
	}
    }
}
