#!/usr/bin/perl

&getquery;

sub getquery {
    if ($ENV{'REQUEST_METHOD'} eq "GET") {
        $qs= $ENV{'QUERY_STRING'};
    } elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
        read(STDIN, $qs, $ENV{'CONTENT_LENGTH'});
    }
    &extract_qs;
}

sub extract_qs {
    @split = split (/&/, $qs);
    foreach $split (@split) {
    	($query_key, $query_value) = split (/=/, $split);
    	$query_value =~ tr/+/ /;
    	$query_value =~ s/%([\dA-Fa-f][\dA-Fa-f])/ pack ("C", hex ($1))/eg;
	$query_value =~ s/\|//g;
	$query_value =~ s/\;/\^/g;
    	$query{$query_key} = $query_value;
    }

}


$scriptname = "nummerlista.cgi";
$nummerlistafile = "D:\\inetpub\\www.mkr-karting.se\\databas\\nummer";
$nummerlistadir = "D:\\inetpub\\www.mkr-karting.se\\databas\\data";
$td_bg1 = "#eeeeee";
$td_bg2 = "#dddddd";

$lock_sec = "5";

sub check_lock {
   $time = $_[0];

   for ($i = 1;$i <= $time; $i++) {
      if (-e "$lock_file") {
         sleep 1;
      }
      else {
         open(LOCK,">$lock_file");
         print LOCK "0";
         close(LOCK);
         last;
      }
   }
}

sub clean_up {
   unlink("$lock_file");
}


if ($query{'action'} eq "show_nummerlista") {
	&show_nummerlista;
} elsif ($query{'action'} eq "view_subnummerlista") {
	&view_subnummerlista;
} elsif ($query{'action'} eq "change_subnummerlista") {
	&change_subnummerlista;
} elsif ($query{'action'} eq "write_oldsubnummerlista") {
	&write_oldsubnummerlista;
} else {
	&show_nummerlista;
}



sub header {
print "Content-type: text/html\n\n";
print <<HTML;

<HTML>
 <HEAD>
	<TITLE></TITLE>
		<LINK REL="stylesheet" HREF="main.css">
	</HEAD>
<BODY BGCOLOR="$bgcolor" BACKGROUND="CKBACK.GIF" TEXT="#000000" LINK="#000000" VLINK="#000000" ALINK="#000000">
<DIV STYLE="width:500px">

HTML

}

sub footer {

print <<HTML;

</DIV>
</BODY>
</HTML>

HTML

}



sub show_nummerlista {

$lock_file = "$nummerlistafile.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistafile", or die "Kunde inte öppna filen 1.\n";
  @nummerlistaarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;



&header;

print "<CENTER><IMG SRC=\"MKRhead.gif\"><br><B>Uppdateras dagligen</B><br><br><B><FONT SIZE=\"2\">Startnummerlistor för MKR-serien  </FONT></B><br><br> Här finns startnummer för nedanstående klasser. Här är det tänkt att du som besökare kan själv boka ditt startnummer som är markerat med texten Ledig! fram t.o.m. anmälningstidens utgång  för respektive tävling. Därefter låses listan fram till onsdagen efter tävlingen. <br><br> <B>OBS!</B> Du kan endast boka numret du vill ha <B>EN</B> gång. Missbrukas detta stängs vederbörande av från denna möjlighet att boka. Komihåg att <B>alla IP-adresser loggas</B>.</CENTER></B><BR><BR>\n";

print "<TABLE WIDTH=\"100%\" CELLPADDING=\"0\" CELLSPACING=\"0\" BORDER=\"0\" BACKGROUND=\"img/prick_bg.gif\"><TD>\n";
print "<TABLE WIDTH=\"100%\" CELLPADDING=\"2\" CELLSPACING=\"1\" BORDER=\"0\">\n";

$farg = "$td_bg2";
$listafound = "1";
$position = "0";

 foreach $nummerlista_tmp (@nummerlistaarr) {

    @nummerlistalinkarr = split /\;/, $nummerlista_tmp;

		$position = ($position + 1);
		$up_position = ($position - 1);
		$down_position = ($position + 2);

		if ($farg eq "$td_bg1") { 
			$farg = "$td_bg2"; 
		} else { 
			$farg = "$td_bg1"; 
		}

		print "<TR BGCOLOR=\"$farg\"><TD VALIGN=\"top\" CLASS=\"Main\" WIDTH=\"100%\">\n";
		print "<A HREF=\"$scriptname?action=view_subnummerlista&ID=$nummerlistalinkarr[0]\" CLASS=\"MainBlack\"><B>$nummerlistalinkarr[1]</B></A></TD>\n";
		print "</TR>\n";
		print "\n";
		$listafound = ($listafound + 1);
 }

if ($listafound eq "1") {
		print "<TR STYLE=\"BACKGROUND-IMAGE:none\;BACKGROUND-COLOR:$farg\">\n";
		print "<TD VALIGN=\"top\" CLASS=\"Main\"><CENTER>Databasen är tom.</TD>\n";
		print "</TR>\n";
}

print "</TABLE>\n";
print "</TD></TABLE><BR>\n";

print "<br><br><center><a href=\"../startnummer.htm\"> Tillbaka till startnummerlistan </a></center>\n";

&footer;

exit;

}


##############################################################################


sub view_subnummerlista {

$farg = "$td_bg2";

&header;


$lock_file = "$nummerlistafile.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistafile", or die "Kunde inte öppna filen 1.\n";
  @nummerlistaarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;

 foreach $nummerlista_tmp (@nummerlistaarr) {

    @nummerlistalinkarr = split /\;/, $nummerlista_tmp;

	if ($nummerlistalinkarr[0] eq "$query{'ID'}") {
		$kat_namn = "$nummerlistalinkarr[1]";
		$locked = "$nummerlistalinkarr[2]";
	}
 }

print "<B>Nummerlista: $kat_namn</B> &nbsp;&nbsp;&nbsp;&nbsp;&laquo; <A HREF=\"?action=show_nummerlista\" CLASS=\"Main\">Tillbaka till listgrupperna</A><BR><BR>\n";

if ($locked eq "1") {
	print "<B>OBS!!</B> Ändringar till denna lista kan ej göras för tillfället.<BR><BR>\n";
} else {
	print "Listan är upplåst och lediga nummer kan nu fyllas i.<BR><BR>\n";
}

print "<TABLE WIDTH=\"100%\" CELLPADDING=\"2\" CELLSPACING=\"1\" BORDER=\"0\">\n";

print "</TD><TD VALIGN=\"top\" CLASS=\"Main\">\n";
print "<B>Nr</B>\n";
print "</TD><TD VALIGN=\"top\" CLASS=\"Main\">\n";
print "<B>Namn</B>\n";
print "</TD><TD VALIGN=\"top\" CLASS=\"Main\">\n";
print "<B>Klubb</B>\n";
print "</TD></TR>\n";






$lock_file = "$nummerlistadir/$query{'ID'}.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistadir/$query{'ID'}", or die "Kunde inte öppna filen 1.\n";
  @imageBANKarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;

  foreach $nummerlistatmp (@imageBANKarr) {

    @nummerlistaarr = split /\;/, $nummerlistatmp;

		if ($farg eq "$td_bg1") { 
			$farg = "$td_bg2"; 
		} else { 
			$farg = "$td_bg1"; 
		}


		print "<TR BGCOLOR=\"$farg\"><TD VALIGN=\"top\" ALIGN=\"right\" CLASS=\"Main\" WIDTH=\"20\">\n";
		print "<B>$nummerlistaarr[0]</B>\n";
		
		print "</TD><TD VALIGN=\"top\" CLASS=\"Main\">\n";

		if ($nummerlistaarr[1] eq "") {
			if ($locked ne "1") {
				print "<A HREF=\"$scriptname?action=change_subnummerlista&ID=$query{'ID'}&nummer=$nummerlistaarr[0]\"><B>Ledig!</B></A>\n";
			} else {
				print "Ledig!\n";
			}
		} else {
		print "$nummerlistaarr[1]\n";
		}
		
		print "</TD><TD VALIGN=\"top\" CLASS=\"Main\">\n";
		print "$nummerlistaarr[2]\n";
		print "</TD></TR>\n";
}


print "</TABLE>\n";


&footer;
exit;

}


sub change_subnummerlista {



$lock_file = "$nummerlistafile.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistafile", or die "Kunde inte öppna filen 1.\n";
  @nummerlistaarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;

 foreach $nummerlista_tmp (@nummerlistaarr) {

    @nummerlistalinkarr = split /\;/, $nummerlista_tmp;

	if ($nummerlistalinkarr[0] eq "$query{'ID'}" && $nummerlistalinkarr[2] eq "1") {
		&header;
		print "Denna lista är låst och kan ej redigeras.\n";
		&footer;
		exit;
	}
 }


$lock_file = "$nummerlistadir/$query{'ID'}.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistadir/$query{'ID'}", or die "Kunde inte öppna filen 1.\n";
  @imageBANKarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;

  foreach $nummerlistatmp (@imageBANKarr) {

    @nummerlistaarr = split /\;/, $nummerlistatmp;

	if ($nummerlistaarr[0] eq "$query{'nummer'}" && $nummerlistaarr[1] ne "") {
		&header;
		print "Denna post är upptagen och kan ej redigeras.\n";
		&footer;
		exit;
	}
 }


&header;

$lock_file = "$nummerlistadir/$query{'ID'}.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistadir/$query{'ID'}", or die "Kunde inte öppna filen.\n";
  @imageBANKarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;

  foreach $imagetmp (@imageBANKarr) {
    @nummerarr = split /\;/, $imagetmp;

	if ($nummerarr[0] eq "$query{'nummer'}") {
		$found = 1;
		$nummerarr[2] =~ s/<BR>/\n/g;
		$found = 1;

		print "<B>Ändra nummerpost</B><BR><BR>\n";
		print "<FORM ACTION=\"$scriptname\" METHOD=\"post\">\n";
		print "<INPUT TYPE=\"hidden\" NAME=\"action\" VALUE=\"write_oldsubnummerlista\">\n";
		print "<INPUT TYPE=\"hidden\" NAME=\"ID\" VALUE=\"$query{'ID'}\">\n";
		print "<INPUT TYPE=\"hidden\" NAME=\"nummer\" VALUE=\"$query{'nummer'}\">\n";
		print "<B>Namn</B><BR>\n";
		print "<INPUT TYPE=\"text\" NAME=\"namn\" CLASS=\"Textruta\" STYLE=\"WIDTH:100%;HEIGHT:14px\" VALUE=\"$nummerarr[1]\"><BR>\n";
		print "<B>Klubb:</B><BR>\n";
		print "<INPUT TYPE=\"text\" NAME=\"klubb\" CLASS=\"Textruta\" STYLE=\"WIDTH:100%;HEIGHT:14px\" VALUE=\"$nummerarr[2]\"><BR>\n";
		print "<DIV ALIGN=\"right\"><INPUT TYPE=\"submit\" VALUE=\"Spara ändringar\" CLASS=\"Submit\"></DIV><BR><BR>\n";
		print "</FORM>\n";
		}
	 }

 if ($found ne "1") {
	print "<B>Det finns ingen sida som matchar länken.</B>\n";
 }


	&footer;
exit;

}


sub write_oldsubnummerlista {


if ($query{'ID'} eq "") {
	&header;
	print "<B>FEL!</B><BR><BR>\n";
	print "<B>Det finns inget grupp-ID.</B><BR><BR>\n";
	&footer;
	exit;
}

if ($query{'nummer'} eq "") {
	&header;
	print "<B>FEL!</B><BR><BR>\n";
	print "<B>Det finns inget nummer angivet.</B><BR><BR>\n";
	&footer;
	exit;
}

$query{'namn'} =~ s/\"/\'\'/g;
$query{'klubb'} =~ s/\"/\'\'/g;

$lock_file = "$nummerlistadir/$query{'ID'}.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistadir/$query{'ID'}", or die "Kunde inte öppna filen 1.\n";
  @imageBANKarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

&clean_up;

  foreach $nummerlistatmp (@imageBANKarr) {

    @nummerlistaarr = split /\;/, $nummerlistatmp;

	if ($nummerlistaarr[0] eq "$query{'nummer'}" && $nummerlistaarr[1] ne "") {
		&header;
		print "Denna post är upptagen och kan ej redigeras.\n";
		&footer;
		exit;
	}
 }


$lock_file = "$nummerlistadir/$query{'ID'}.lock";
&check_lock($lock_sec);

 open NUMMERLISTA, "$nummerlistadir/$query{'ID'}", or die "Kunde inte öppna filen.\n";
  @imageBANKarr = <NUMMERLISTA>;
 close(NUMMERLISTA);

  open BOX3, ">$nummerlistadir/$query{'ID'}", or die "Kunde inte öppna filen.\n";

  foreach $imagetmp (@imageBANKarr) {
    @nummerarr = split /\;/, $imagetmp;

	if ($nummerarr[0] eq "$query{'nummer'}") {
		print BOX3 "$nummerarr[0]\;$query{'namn'}\;$query{'klubb'}\;\;\;\;\;\n";
	} else {
		print BOX3 "$imagetmp";
	}
  }


close(BOX3);

&clean_up;

print "Location: $scriptname?action=view_subnummerlista&ID=$query{'ID'}\n\n";
exit;

}











1;
