#!/usr/bin/perl
#!C:\Perl\bin\perl
# 2004/09/29 タイトル等から文字列の1部を切り取って表示すると文字化けする不具合を修正

# リストインデックス表示cgi

#use strict;
require './lib/config.cgi';        # 各種設定

# グローバル変数
my $url = "listindex.cgi";	# このファイルの名前

my $file = "data/data.csv"; # データファイル

my $lockfile = "lock/"; # ロックファイル

my $imgdir="img/";

my $list_skin_file = "list_skin.html";

# ライブラリ
require "./lib/jcode.pl"; # 日本語文字コード処理

#表示文字限界
$comment_limit1 = 24; ##半角２４文字
$comment_limit2 = 48; ##半角４８文字

#--オプションファイルの読み込み--#
open IN,$CFG::OptionFile;
@Opt = split(/,/,<IN>);
close IN;
my $password = $Opt[0];
my $step = $Opt[1];
my $column = $Opt[2];
my $yokospace = $Opt[3];
my $tatespace = $Opt[4];

my $mae = "<img src=\"image/back.gif\" width=\"50\" hight=\"15\" border=\"0\">";
my $ushiro = "<img src=\"image/next.gif\"  width=\"50\" hight=\"15\" border=\"0\">";

## データの読み込み ##


##### CSVからのデータ呼び出し #####
if ($file eq '') { &error("File Not Found","編集するファイルが指定されていません."); }
if (!-e "$file") { &error("File Not Found","$fileが見つかりません."); }

if (!open(IN,"$file")) { &error("File Not Open","$fileを開くことができません."); }
my @BASE_ORG = <IN>;
close(IN);

#@BASE_ORG = reverse @BASE_ORG;
##### CSVからのデータ呼び出し ココまで#####


my @ttmp;
foreach(@BASE_ORG){ # 表示タイミング指定により非表示のものを除外
	my @temp = split(/,/,$_);
	if($temp[19] =~ "on"){
		push(@ttmp,$_);
	}
}
my @BASE = @ttmp;
my $buffer;

my $BASE2;
my $c;
my $st;
my $en;
my $c_next;
my $c_back;


if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
my @pairs = split(/&/,$buffer);
my $pair;
my %FORM;
foreach $pair (@pairs) {
	my $name;
	my $value;
	($name,$value) = split(/=/,$pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	&jcode'convert(*value,'sjis');

	$value =~ s/<//g;
	$value =~ s/>//g;
	$value =~ s/"//g;
	$value =~ s/\n//g;
	$value =~ s/\r//g;
	$value =~ s/\,//g;

	$FORM{$name} = $value;
	
}


######  アクションの決定 ######

&main;

exit;





sub main {


	####### ページ数の計算 ######

        $BASE2 = $#BASE + 1;
        $c = $FORM{'c'};
	if (!$c) { $c = 0; }
	if (!$step) { $step=50; }
	$st = $c;
	$en = $c + $step;
	$c_next = $c + $step;
	$c_back = $c - $step;
	#if ($en > $BASE2) { $en = $BASE2; }

	####### ページ数の計算 ココまで ######




print "Content-type: text/html\n\n";

## スキンを読む ##
my @skins;
open IN ,"./header.html";
while (<IN>) { push(@skins,$_); }
close IN;
## スキンを読む ##
foreach $lines (@skins){
	print $lines;
}

for ($c = $st; $c <$en; $c++) {
		my @item;
		$BASE[$c] =~ s/\n//g;
		(@item) = split(/\,/,$BASE[$c]);
		foreach(@item){
			$_ =~ s/_brake_//g;
			$_ =~ s/_comma_/,/g;
			$_ =~ s/&quot;/\"/g;
			$_ =~ s/&amp;/&/g;
		}
		
		## スキンを読む ##
		my @skins;
		open IN ,"./list_skin.html";
		while (<IN>) { push(@skins,$_); }
		close IN;
		## スキンを読む ##
		
		## ダミースキンを読む ##
		my @skins2;
		open IN ,"./list_skin_d.html";
		while (<IN>) { push(@skins2,$_); }
		close IN;
		## ダミースキンを読む ##
		
		if($c % $column == 0){ print ""; }
		
		print ''."\n";
		## ここの部分をスキン化する
		if($BASE[$c]){
		foreach $line (@skins){
				if($line =~ /__img1__/){
					if($item[6]){
						my @size1= split(/-/,$item[7]);
						my $image_tmp2 = $imgdir.$item[6];
						$line  =~ s/__img1__/$image_tmp2/g;
					}else{
						my $image_tmp2 = $imgdir."spacer.gif";
						$line  =~ s/__img1__/$image_tmp2/g;
					}
					print "$line";
				}elsif($line =~ /__link__/){
					my $link_tmp = "./new_skin.cgi?code=".$item[0];
					$line  =~ s/__link__/$link_tmp/g;
					print "$line";
				}elsif($line =~ /__title__/){
					$line  =~ s/__title__/$item[8]/g;
					print "$line";
				}elsif($line =~ /__subtitle__/){
					$line  =~ s/__subtitle__/$item[9]/g;
					print "$line";
				}elsif($line =~ /__comment1__/){
					$line  =~ s/__comment1__/$item[10]/g;
					print "$line";
				}elsif($line =~ /__comment2__/){
					$line  =~ s/__comment2__/$item[11]/g;
					print "$line";
				}elsif($line =~ /__img2__/){
					$line  =~ s/__img2__/$imgdir$item[13]/g;
					print "$line";
				}elsif($line =~ /__img3__/){
					$line  =~ s/__img3__/$imgdir$item[15]/g;
					print "$line";
					
				}elsif($line =~ /__img4__/){
					$line  =~ s/__img4__/$imgdir$item[17]/g;
					print "$line";
					
				}elsif($line =~ /__img5__/){
					$line  =~ s/__img5__/$imgdir$item[20]/g;
					print "$line";
					
				}elsif($line =~ /__img6__/){
					$line  =~ s/__img6__/$imgdir$item[22]/g;
					print "$line";
					
				}elsif($line =~ /__img7__/){
					$line  =~ s/__img7__/$imgdir$item[24]/g;
					print "$line";
					
				}elsif($line =~ /__img8__/){
					$line  =~ s/__img8__/$imgdir$item[26]/g;
					print "$line";
				
				}elsif($line =~ /__img9__/){
					$line  =~ s/__img9__/$imgdir$item[28]/g;
					print "$line";
				#}elsif($line =~ /__comment3__/){
				#	my $aa = '';
				#	my $bb = substr($item[6],0,$comment_limit1);
				#	while ($bb =~ /([\x00-\x7f]|..)/g) {
				#		$aa = $aa.$1;
				#	}
				}else{
					print "$line";
				}
		}
		}else{
			if($column!='1'){
				foreach $line (@skins2){
						print "$line";
				}
			}
		
		}
		## ここの部分をスキン化する
		print ''."\n";
		
		my $column2 = $column-1;
		if($column>1 && $c % $column != $column2 && $yokospace eq "1"){
	   		print "";
		}
		my $column_tmp = $column + ($column-1);
		if($c % $column == $column2 && $tatespace eq "1"){
			print ""; 
		}

}

	## ページ移動ボタンの作成 ##
	$kosuu = ($BASE2 / $step);
	$amari = ($BASE2 % $step);
	$amari2 = $amari / $step;
	if( $amari2 >= '0.5'){
		$kosuu = int($kosuu + 0.5);
	}elsif($amari2=='0'){
		$kosuu = ($BASE2 / $step);
	}elsif($amari2 < '0.5'){
		$kosuu = int($kosuu);	
		$kosuu = $kosuu +1;
	}

	$kosuu2 = $kosuu;
	
	if($kosuu > 10){
		$kosuu = 10;
	}

	$ichi = ($st/$step);
	$ichi = int($ichi);

	if($ichi < 4){
		$kaishi = 1;
		$c = 0;
		$c2 = 0;
	}elsif($ichi >= 4 ){
	 if($kosuu<10){
	    $kaishi = 1;
	    $c = 0;
	    $c2 = 0;
	  }else{
	    $kaishi = $ichi - 3;
	    $kosuu =  $ichi + 6;
	    $c2 = ($kaishi - 1) * $step;
	  }
	}

	$st2 = $st+1;

	if($kosuu2 > 1){ ##/*  ページ数が０のときは何も表示しない */
	    $backnext_tmp = "<TABLE border=\"0\" cellpadding=\"4\" cellspacing=\"4\" width=\"510\" style=\"margin-left:10px;\">\n";
	    $backnext_tmp .= "<tr>\n";
	    
	if ($st > 0) {

		  $li2  = "c=".$c_back;
		  $backnext_tmp .= "<td valign=bottom align=left>";
		  $backnext_tmp .= "<A HREF=\"$url?$li2\" style=\"color:#666666; font-size:12px; \">";
		  $backnext_tmp .= $mae;
		  $backnext_tmp .= "</a></td>\n";
	}

	  if ($BASE2 > $st + $step ) {
		$li2  = "c=".$c_next;
   		$backnext_tmp .= "<td valign=bottom align=right><A HREF=\"$url?$li2\" style=\"color:#666666; font-size:12px; \">";
   				
   		$backnext_tmp .= $ushiro;
		$backnext_tmp .= "</A></td>\n";
	 }
	 $backnext_tmp .= "</tr></table>";
	}
## スキンを読む ##
my @skins;
open IN ,"./footer.html";
while (<IN>) { push(@skins,$_); }
close IN;
## スキンを読む ##
foreach $line (@skins){
	if($line =~ /__backnext__/){
		$line  =~ s/__backnext__/$backnext_tmp/g;
		print "$line";
	}else{
		print "$line";
	}
}


}



sub error {

	local (@msg) = @_;
	local ($i);

	print "Content-type: text/html\n\n";
	print <<"EOF";
	<HTML>
	<HEAD>
	<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
	<TITLE>ERROR</TITLE>
	<SCRIPT language="JavaScript">
	<!--
	function PageBack(){ history.back(); }
	//-->
	</SCRIPT>
	</HEAD>
	<BODY>
	<center>
	<table border="0" cellspacing="0" cellpadding="0" width=$width>
	<tr><td align=center valign="top">
	<font size=2 color=red>$_[0]</font>
EOF

	foreach $i (1 .. $#msg) { print "$msg[$i]<br>\n"; }

	print <<"EOF";
	<h3>[<A HREF="JavaScript:history.back()">前の画面</A>]</h3>
	</td></tr>
	</table>
	</BODY></HTML>
EOF
	exit;
}
