#!/usr/bin/perl --

#################################################################### 
#
#	eSurvey
#	©2002, PerlScriptsJavaScripts.com
#
#	Requires: Perl5+
#	Created:  March 12, 2002
#	Author:   John Krinelos
#	Contact:  john@perlscriptsjavascripts.com
#	
#	This script / program is copyright material!
#	
#################################################################### 
#
#	There is no need to edit anything in this file
#	Edit the _key.cgi file only
#
#################################################################### 

# used to concatenate admin and cfg file. 
# Also makes up the first part of the data folder's name 
my $ext        = "cgi";
my $ScriptName = "esurvey"; 
my $publicURL  = "$ScriptName\.$ext";

# Determine OS and set a seperator
$OS = $^O;
if($OS =~ /Darwin/i) { $isMac = 1; $isUNIX = 1;}
elsif($OS =~ /win/i) { $isWIN = 1; }
else {$isUNIX = 1;}
if($isWIN){ $S{S} = "\\\\"; }
else { $S{S} = "/";}

# get config file
if($isWIN){	
	$absPath            = $ENV{PATH_TRANSLATED};
	$relPath            = $ENV{PATH_INFO};
	$relPath            =~ s/\//$S{S}/g;
	$ENV{DOCUMENT_ROOT} = $absPath; 
	$ENV{DOCUMENT_ROOT} =~ s/$relPath//i; 
	
	$TransPath          = $ENV{PATH_TRANSLATED};
	$ConfigPath         = $TransPath;
	$ConfigPath         =~ s/\.$ext/\_cfg\.$ext/;
	$KeyPath            = $TransPath;
	$KeyPath            =~ s/\.$ext/\_key\.$ext/;
} elsif($isMac){
	$TransPath          = $ENV{SCRIPT_FILENAME};
	$ConfigPath         = $TransPath;
	$ConfigPath         =~ s/\.$ext/\_cfg\.$ext/;
	$KeyPath            = $TransPath;
	$KeyPath            =~ s/\.$ext/\_key\.$ext/;
} else {
	$ConfigPath = "$ScriptName\_cfg\.$ext";
	$KeyPath    = "$ScriptName\_key\.$ext";
}
require $ConfigPath; 
require $KeyPath; 

$DefaultData  =~ s/(\/|\\)+$//g;
$SecureServer =~ s/(\/|\\)+$//g;

$ScriptURL = "http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}";
# Dynamically create URL.
if($SecureServer) { $ScriptURL = qq~$SecureServer/$publicURL~; }

$pieURL    = $ScriptURL;
$pieURL    =~ s/$ScriptName.$ext/charts\/$ScriptName\_pie.$ext/ig;
$barURL    = $ScriptURL;
$barURL    =~ s/$ScriptName.$ext/charts\/$ScriptName\_bar.$ext/ig;
$polarURL  = $ScriptURL;
$polarURL  =~ s/$ScriptName.$ext/charts\/$ScriptName\_polar.$ext/ig;

# Add the folder pass and create a data path
$ScriptName .= $FolderPass;

# get the path to data files
if($DefaultData){
	$DefaultData =~ s/(\/|\\)$//g;
	$Data        = qq~$DefaultData$S{S}psjs_datalogs$S{S}$ScriptName~;
} else {
	$Data        = qq~$ENV{DOCUMENT_ROOT}$S{S}psjs_datalogs$S{S}$ScriptName~;
}

use CGI; 
my $GET = new CGI;
my @VAL = $GET->param;

# must use either Get or Post fields [cant read both]
foreach(@VAL){
	$FORM{$_} = $GET->param($_);
}

&Initialize($FORM{id});
&Date;
&GetCookies;

#################################################################### 
#                        Script Commands                           #
#################################################################### 

if($FORM{action} eq "viewSurvey"){
	&viewSurvey($FORM{id});
} elsif($FORM{action} eq "previewSurvey"){
	&previewSurvey($FORM{id});
} elsif($FORM{action} eq "processSurvey"){
	&processSurvey($FORM{id});
} elsif($FORM{action} eq "listSurveys"){
	&list($FORM{id});
} elsif($FORM{action} eq "viewResults"){
	&res($FORM{id});
} else {
	&error($FORM{id});
}

#################################################################### 

#################################################################### 

sub list {
	my ( %VAR, @details, @divs, @ispub, @public );

	$VAR{mid} = shift;
	
	@details = getfile("$Data$S{S}data$S{S}details\.list");
	
	foreach(@details){
		@divs = split(/\|\|/, $_);
		@ispub = getline('publicres', "$Data$S{S}$divs[0]$S{S}config\.ftf");
		
		if($ispub[1] == 1){
			push(@public, $_);
		}
	}
	
	&PrintHead();
	
	print qq~
	<table align="center" border="0" bgcolor="#ffffff" cellpadding="3" cellspacing="1" $st1>
	<tr bgcolor="$bg1">
	<td><b>$lang{PublicSurvSit}</b></td>
	<td><b>$lang{PublicSurvName}</b></td>
	<td align="right"><b>$lang{PublicSurvSubs}</b></td>
	</tr>
	~;
	
	$VAR{a} = 0;
	foreach(@public){
		@divs = split(/\|\|/, $_);
		$VAR{bg} = $VAR{a} % 2 == 0 ? qq~$bg2~ : qq~$bg3~;
		
		@res = getfile("$Data$S{S}$divs[0]$S{S}subs.list");
		$VAR{res} = $res[0] ? $res[0] + 1 : 0;
		
		print qq~
		<tr bgcolor="$VAR{bg}">
		<td><a href="$ScriptURL?action=viewSurvey&mid=$VAR{mid}&id=$divs[0]">$divs[1]</a></td>
		<td><a href="$ScriptURL?action=viewResults&mid=$VAR{mid}&id=$divs[0]">$divs[1]</a></td>
		<td align="right">$VAR{res}</td>
		</tr>
		~;
		$VAR{a}++;
	}
	
	print qq~
	</table>
	~;
	
	&PrintFoot;
}

#################################################################### 

#################################################################### 

sub res {
	my ( %VAR, @divs, @questions, @surveys, @rows, @answers, %count, %perc );
	my ( %units, @adivs, %text, @idivs, @subs, %divs, %total, @ispub, %done );
	my ( @cats, %catQuests, %catScore, %catTotal );
	
	$VAR{id} = shift;
	
	&PrintHead();
	
	@name = getline($VAR{id}, "$Data$S{S}data$S{S}details\.list");
	$VAR{name} = $name[1];
	
	@ispub = getline('publicres', "$Data$S{S}$name[0]$S{S}config\.ftf");
	
	# get n sort cats
	@cats = &getfile("$Data$S{S}$VAR{id}$S{S}cats.ftf");
	
	foreach(@cats){
		@divs = split(/\|\|/, $_); 
		push(@rows, $divs[2]);
		
		# define cats
		$catQuests{$divs[0]} = 0;
	}
	@cats = @cats[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
	
	if($ispub[1] == 1){
		@subs = getfile("$Data$S{S}$VAR{id}$S{S}subs\.list");
		@questions = getfile("$Data$S{S}$VAR{id}$S{S}questions\.list");
		
		undef @rows;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			push(@rows, $divs[1]);
	
			if($divs[9]){
				$VAR{emailFLD} = qq~Surv_$divs[2]_$divs[0]~;
			}
			if($divs[10]){
				$VAR{fnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
			}
			if($divs[11]){
				$VAR{lnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
			}
			
			# count num qs in each
			$catQuests{$divs[15]}++;
		}
		#$VAR{fnameFLD} ||= $VAR{emailFLD};
		
		@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
	
		# get total units for each question and each answer
		foreach(@subs){
			%divs = split(/\|\|/, $_);
			foreach(keys %divs){
				if($_ =~ /Surv\_/){
					if($_ =~ /Surv\_T/ || $_ =~ /Surv\_X/ || $_ =~ /Surv\_F/){
						$divs{$_} =~ s/!LBCR!/<br>/ig;
						if($_ eq $VAR{emailFLD}){
							$text{$_} .= qq~<a href="mailto:$divs{$VAR{fnameFLD}} $divs{$VAR{lnameFLD}} <$divs{$_}>" class="green">$lang{ResultsEmail}</a> <a href="$ScriptURL?viewsubmission=$divs{Entry_ID}=$divs{Survey_ID}" class="green">$divs{$_}</a><br><br>~;
						} elsif($_ =~ /Surv\_File/ && $divs{$_}){
							$text{$_} .= qq~<a href="$CONFIG{def_url}/F$COOKIE{adminid}/$divs{$_}" target="_blank" class="green">$divs{$_}</a><br><br>~;
						} elsif($divs{$_}){
							$text{$_} .= qq~$divs{$_}<br><br>~;
						}
					} elsif($divs{$_}){
						# add answer id to distinguish from other answers
						if($_ =~ /Surv\_Checkbox/){
							# checkboxes already have the ID, strip it for groups
							@divs = split(/\_/, $_);
							$VAR{grouped} = qq~$divs[0]\_$divs[1]\_$divs[2]~;
							$units{$_}++;
							$total{$VAR{grouped}}++;
						} else {
							$units{"$_\_$divs{$_}"}++;
							$total{$_}++;
						}
					}
				}
			}
		}
		
		# get graphs and percs
		foreach(keys %units){
			# grouped answers have no answer id
			@divs = split(/\_/, $_);
			$VAR{grouped} = qq~$divs[0]\_$divs[1]\_$divs[2]~;
			if($units{$_} > 0 && $total{$VAR{grouped}} > 0){
				$perc{$_}  = $units{$_} * 100 / $total{$VAR{grouped}};
				$perc{$_}  = sprintf("%0.2f", $perc{$_});
				1 while $perc{$_} =~ s/(.*\d)(\d\d\d)/$1,$2/g;
				
				$graph{$_} = &getGraph($perc{$_});
				$perc{$_} .= qq~%~;
			} else {
				$graph{$_} = &getGraph();
				
				$perc{$_}  = qq~0%~;
			}
		}
		
		if($CONFIG{showtyped} == 1){
			print qq~
			<script language="JavaScript" type="text/javascript">
			<!--
			function swapVis(id){
				if(document.getElementById(id).style.display == 'none'){
					document.getElementById(id).style.display = '';
				} else {
					document.getElementById(id).style.display = 'none';
				}
			}
			// -->
			</script>
			
			<table align="center" border="0" cellpadding="0" cellspacing="0" width="660">
			<tr>
			<td><a href="javascript:showAll();">$lang{ResultsShowHideAll}</a></td>
			</tr>
			</table>
			<br>
			~;
		}
		
		print qq~
		<table align="center" border="0" cellpadding="3" cellspacing="0" width="660">
		<tr bgcolor="$bg1">
		<td class="dashedSmllHd"><b>$lang{ResultsQuestion}</b></td>
		<td class="dashedSmllHd"><b>$lang{ResultsAnswer}</b></td>
		<td class="dashedSmllHd"><b>$lang{ResultsUnits}</b></td>
		<td class="dashedSmllHd" colspan="2"><b>$lang{ResultsPercentage}</b></td>
		</tr>
		~;
		
		$VAR{a} = 0;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			unless($divs[9]){
				if($divs[2] eq "Text" || $divs[2] eq "File" || $divs[2] eq "Textarea"){
					print qq~
					<tr>
					<td class="dashedSmll" colspan="5">$divs[4]</td>
					</tr>
					~;
					
					if($CONFIG{showtyped} == 1){
						print qq~
						<tr>
						<td class="dashedSmll" nowrap> &nbsp; &nbsp;</td>
						<td class="dashedSmll" colspan="4"><a href="javascript:swapVis('xf$VAR{a}');">$lang{ResultsShowHide}</a> 
						$VAR{txtAnswrs}	
						
						<div id="xf$VAR{a}" style="display:none; overflow: auto; background: #f8f8f8; border: #cccccc solid 1px; padding: 3px; height: 160px;">
						<table border="0" cellpadding="0" cellspacing="0" width="100%">
						<tr>
						<td>$text{"Surv_$divs[2]_$divs[0]"} $text{"Surv_X_$divs[0]"}</td>
						</tr>
						</table>
						</div>
				
						</td>
						</tr>
						~;
					}
					
					$VAR{a}++;
				}
			}
		}
		
		# get cat names
		foreach(@cats){
			@divs = split(/\|\|/, $_);
			$divs[1] =~ s/<\*br\*>/ /ig;
			$cat{$divs[0]} = $divs[1];
		}
		
		# now sort by cat, then defined order
		undef @rows;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			push(@rows, qq~$cat{$divs[15]}$divs[1]~);
		}
		@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
		
		$VAR{c} = 0;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			unless($divs[9]){
				if($divs[2] eq "Radio" || $divs[2] eq "Checkbox" || $divs[2] eq "Select"){
					
					unless($done{$divs[15]}){
						@divs = split(/\|\|/, $_);
						
						print qq~
						<tr bgcolor="$bg1">
						<td class="dashedSmllHd" colspan="5"><font color="$CONFIG{warn}"><b>$cat{$divs[15]}</b></font></td>
						</tr>
						~;
						
						$done{$divs[15]} = 1;
					}
					
					@answers = split(/!LBCR!/, $divs[5]);
					undef @rows;
					foreach(@answers){
						@adivs = split(/\:\:/, $_);
						push(@rows, $adivs[0]);
					}
					@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
			
					print qq~
					<tr bgcolor="$bg2">
					<td class="dashedSmllHd" colspan="5">$divs[4]</td>
					</tr>
					~;
					
					$VAR{width}    = 500;
					$VAR{height}   = 120;
					$VAR{bg1} = $bg1; $VAR{bg1} =~ s/\#//ig;
					
					$VAR{data}    = qq~~;
					$VAR{labels}  = qq~~;
					$VAR{rowspan} = 0;
					foreach(@answers){
						@adivs = split(/\:\:/, $_);
						$VAR{data}   .= qq~$perc{"Surv_$divs[2]_$divs[0]_$adivs[0]"},~;
						$VAR{temp}    = $adivs[1];
						$VAR{temp}    =~ s/\,/ /ig;
						$VAR{temp}    =~ s/\&/\+/ig;
						$VAR{labels} .= qq~$VAR{temp},~;
						$VAR{rowspan}++;
					}
					chop $VAR{data}; chop $VAR{labels};
					$VAR{data} =~ s/\%//ig;
					
					$VAR{b} = 0;
					foreach(@answers){
						@adivs = split(/\:\:/, $_);
						$units{"Surv_$divs[2]_$divs[0]_$adivs[0]"} ||= qq~0~;
						$perc{"Surv_$divs[2]_$divs[0]_$adivs[0]"} ||= qq~0%~;
						print qq~
						<tr>
						<td class="dashedSmll" nowrap> &nbsp; &nbsp;</td>
						<td class="dashedSmll">$adivs[1]</td>
						<td class="dashedSmll" nowrap>$units{"Surv_$divs[2]_$divs[0]_$adivs[0]"}</td>
						<td class="dashedSmll" nowrap>$perc{"Surv_$divs[2]_$divs[0]_$adivs[0]"}</td>
						~;
						
						if($GraphMod){
							if($VAR{b} == 0){
								if($CONFIG{usepie} == 1){
									$VAR{params}  = qq~data=$VAR{data}&labels=$VAR{labels}~;
									
									print qq~
									<td align="right" class="dashedSmll" rowspan="$VAR{rowspan}"><img src="$pieURL?$VAR{params}" width="200" height="170"></td>
									~;
								} else {
									$VAR{params}  = qq~width=$VAR{width}&height=$VAR{height}&~;
									$VAR{params} .= qq~bgmain=0x$VAR{bg1}&bgarea=0xffffff~;
									$VAR{params} .= qq~&linewidth=2&data1Clr=0x00ee00~;
									$VAR{params} .= qq~&brdClr=0x000000&plotLeft=52~;
									$VAR{params} .= qq~&plotTop=10&plotWidth=428&plotHeight=88~;
									$VAR{params} .= qq~&depth=5&data1BrdClr=0x00aa00&~;
									$VAR{params} .= qq~&data1=$VAR{data}&labels=$VAR{labels}~;
									
									print qq~
									<td align="right" class="dashedSmll" rowspan="$VAR{rowspan}"><img src="$barURL?$VAR{params}" width="$VAR{width}" height="$VAR{height}"></td>
									~;
								}
							}
						} else {
							print qq~<td class="dashedSmll" nowrap>$graph{"Surv_$divs[2]_$divs[0]_$adivs[0]"}</td>~;
						}
						
						print qq~
						</tr>
						~;
						$VAR{b}++;
					}
					
					if($CONFIG{showtyped} == 1){
						print qq~
						<tr>
						<td class="dashedSmll" nowrap> &nbsp; &nbsp;</td>
						<td class="dashedSmll" colspan="4"><a href="javascript:swapVis('xf$VAR{a}');">$lang{ResultsShowHide}</a> 
						$VAR{txtAnswrs}	
						
						<div id="xf$VAR{a}" style="display:none; overflow: auto; background: #f8f8f8; border: #cccccc solid 1px; padding: 3px; height: 160px;">
						<table border="0" cellpadding="0" cellspacing="0" width="100%">
						<tr>
						<td>$text{"Surv_$divs[2]_$divs[0]"} $text{"Surv_X_$divs[0]"}</td>
						</tr>
						</table>
						</div>
				
						</td>
						</tr>
						~;
					}
					
					$VAR{a}++;
				}
			}
		}
		
		print qq~
		</table>
		~;
		
		if($CONFIG{showtyped} == 1){
			print qq~
			<br>
			<table align="center" border="0" cellpadding="0" cellspacing="0" width="660">
			<tr>
			<td><a href="javascript:showAll();">$lang{ResultsShowHideAll}</a></td>
			</tr>
			</table>
			
			<script language="JavaScript" type="text/javascript">
			<!--
			allOpen = 0;
			function showAll(){
				if(allOpen){
					for(a = 0; a < $VAR{a}; a++){
						id = "xf" + a;
						document.getElementById(id).style.display = 'none';
					}
					allOpen = 0;
				} else {
					for(a = 0; a < $VAR{a}; a++){
						id = "xf" + a;
						document.getElementById(id).style.display = '';
					}
					allOpen = 1;
				}
			}
			// -->
			</script>
			~;
		}
		
		#foreach(keys %units){
		#	print qq~$_ -> $units{$_}<br>
		#	~;
		#}
		#print qq~<br><br>BREAK<br><br>~;
		
		#foreach(keys %total){
		#	print qq~$_ -> $total{$_}<br>
		#	~;
		#}
		
	} else {
		print qq~
		<table align="center" border="0" cellpadding="3" cellspacing="0" $st1>
		<tr bgcolor="$bg1">
		<td>$lang{PublicNotPublic}</td>
		</tr>
		</table>
		~;
	}
	
	&PrintFoot;
}

#################################################################### 

#################################################################### 

sub error {
	my ( %VAR, @name );

	$VAR{id}    = shift;
	$VAR{error} = shift;
	
	&PrintHead($VAR{id});
	
	#foreach(@VAL){ 
	#	$VAR{fu} = $GET->param($_);
	#	print qq~$_ -> $VAR{fu}<br>
	#	~;
	#}
	
	print qq~<font color="$CONFIG{warn}"><b>$VAR{error}</b></font>~;
	
	&PrintFoot($VAR{id});
}

#################################################################### 

#################################################################### 

sub viewSurvey {
	my ( %VAR, @name, @questions, @answers, @divs, @adivs, @reqs, @match, @matched, @edivs );

	$VAR{id}     = shift;
	$VAR{isEdit} = $FORM{isEdit};
	
	@name = getline($VAR{id}, "$Data$S{S}data$S{S}details\.list");
	
	if($CONFIG{unqSubs} == 1){
		$CONFIG{policeby} ||= 3;
		
		if($CONFIG{policeby} == 1){
			if($ENV{REMOTE_ADDR} =~ /\w+/){
				@edivs = &getline($ENV{REMOTE_ADDR}, "$Data$S{S}$VAR{id}$S{S}$VAR{id}\_ips.list");
				if($edivs[0]){
					$VAR{date} = &getDate($edivs[1]); 
					
					$lang{SettSubmittedIP} =~ s/%%%date%%%/$VAR{date}/ig;
					$lang{SettSubmittedIP} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
					$lang{SettSubmittedIP} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
					$lang{SettSubmittedIP} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
					$lang{SettSubmittedIP} =~ s/%%%day%%%/$CONFIG{startday}/ig;
					$lang{SettSubmittedIP} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
					&error($VAR{id}, $lang{SettSubmittedIP}); return;
				}
			}
		} elsif($CONFIG{policeby} == 2){
			if($COOKIE{"eSurv_$VAR{id}"}){
				@edivs = split(/\|\|/, $COOKIE{"ePoll_$VAR{id}"});
				$VAR{date} = &getDate($edivs[1]);
				
				$lang{SettSubmittedCookie} =~ s/%%%date%%%/$VAR{date}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
				$lang{SettSubmittedCookie} =~ s/%%%day%%%/$CONFIG{startday}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
				&error($VAR{id}, $lang{SettSubmittedCookie}); return;
			}
		} else {
			if($ENV{REMOTE_ADDR} =~ /\w+/){
				@edivs = &getline($ENV{REMOTE_ADDR}, "$Data$S{S}$VAR{id}$S{S}$VAR{id}\_ips.list");
				if($edivs[0]){
					$VAR{date} = &getDate($edivs[1]); 
					
					$lang{SettSubmittedIP} =~ s/%%%date%%%/$VAR{date}/ig;
					$lang{SettSubmittedIP} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
					$lang{SettSubmittedIP} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
					$lang{SettSubmittedIP} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
					$lang{SettSubmittedIP} =~ s/%%%day%%%/$CONFIG{startday}/ig;
					$lang{SettSubmittedIP} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
					&error($VAR{id}, $lang{SettSubmittedIP}); return;
				}
			}
			if($COOKIE{"eSurv_$VAR{id}"}){
				@edivs = split(/\|\|/, $COOKIE{"ePoll_$VAR{id}"});
				$VAR{date} = &getDate($edivs[1]); 
				
				$lang{SettSubmittedCookie} =~ s/%%%date%%%/$VAR{date}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
				$lang{SettSubmittedCookie} =~ s/%%%day%%%/$CONFIG{startday}/ig;
				$lang{SettSubmittedCookie} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
				&error($VAR{id}, $lang{SettSubmittedCookie}); return;
			}
		}
	}
	
	if($CONFIG{startmonth} && $CONFIG{startday} && $CONFIG{startyear}){
		$VAR{yettostart} = 0;
		if($THISYEAR < $CONFIG{startyear}){
			$VAR{yettostart} = 1;
		}
		if($MONTH < $CONFIG{startmonth} && $THISYEAR <= $CONFIG{startyear}){
			$VAR{yettostart} = 1;
		}
		if($DAYOFMONTH < $CONFIG{startday} && $MONTH <= $CONFIG{startmonth} && $THISYEAR <= $CONFIG{startyear}){
			$VAR{yettostart} = 1;
		}
		if($DAYOFMONTH == $CONFIG{startday} && $MONTH == $CONFIG{startmonth} && $THISYEAR == $CONFIG{startyear}){
			if($hour < $CONFIG{starthour}){
				$VAR{yettostart} = 1;
			}
			if($hour == $CONFIG{starthour} && $minute < $CONFIG{startmin}){
				$VAR{yettostart} = 1;
			}
		}
		
		if($VAR{yettostart}){
			$lang{PublicYetToStart} =~ s/%%%date%%%/$month_name[$CONFIG{startmonth} - 1] $CONFIG{startday}, $CONFIG{startyear}/ig;
			$lang{PublicYetToStart} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
			$lang{PublicYetToStart} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
			$lang{PublicYetToStart} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
			$lang{PublicYetToStart} =~ s/%%%day%%%/$CONFIG{startday}/ig;
			$lang{PublicYetToStart} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
			
			&error($VAR{id}, $lang{PublicYetToStart}); return;
		}
	}
	
	if($CONFIG{expmonth} && $CONFIG{expday} && $CONFIG{expyear}){
		$VAR{expired} = 0;
		if($THISYEAR > $CONFIG{expyear}){
			$VAR{expired} = 1;
		}
		if($MONTH > $CONFIG{expmonth} && $THISYEAR >= $CONFIG{expyear}){
			$VAR{expired} = 1;
		}
		if($DAYOFMONTH > $CONFIG{expday} && $MONTH >= $CONFIG{expmonth} && $THISYEAR >= $CONFIG{expyear}){
			$VAR{expired} = 1;
		}
		if($DAYOFMONTH == $CONFIG{expday} && $MONTH == $CONFIG{expmonth} && $THISYEAR == $CONFIG{expyear}){
			if($hour > $CONFIG{exphour}){
				$VAR{expired} = 1;
			}
			if($hour == $CONFIG{exphour} && $minute >= $CONFIG{expmin}){
				$VAR{expired} = 1;
			}
		}
		
		if($VAR{expired}){
			$lang{PublicExpired} =~ s/%%%date%%%/$month_name[$CONFIG{expmonth} - 1] $CONFIG{expday}, $CONFIG{expyear}/ig;
			$lang{PublicExpired} =~ s/%%%time%%%/$CONFIG{exphour}:$CONFIG{expmin}/ig;
			$lang{PublicExpired} =~ s/%%%month%%%/$CONFIG{expmonth}/ig;
			$lang{PublicExpired} =~ s/%%%day%%%/$CONFIG{expday}/ig;
			$lang{PublicExpired} =~ s/%%%year%%%/$CONFIG{expyear}/ig;
			$lang{PublicExpired} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
			&error($VAR{id}, $lang{PublicExpired}); return;
		}
	}
	
	@questions = getfile("$Data$S{S}$VAR{id}$S{S}questions\.list");
	undef @rows;
	foreach(@questions){
		@divs = split(/\|\|/, $_);
		push(@rows, $divs[1]);
	}
	@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
	
	# get required fields after a sort
	foreach(@questions){
		@divs = split(/\|\|/, $_);
		if($divs[7]){
			push(@reqs, $_);
		}
	}
	# generate javascript
	if($reqs[0]){
		$VAR{handler} = qq~onsubmit="return checkF(this);"~;
		
		$VAR{script} = qq~
		$js_check_email
		<script language="JavaScript" type="text/javascript">
		<!--
		REQS = new Array();
		~;
		
		$VAR{a} = 0;
		undef @rows;
		foreach(@reqs){
			@divs = split(/\|\|/, $_);
			
			if($divs[2] eq "Radio"){
				$VAR{script} .= qq~REQS[$VAR{a}] = ["$divs[2]","Surv_$divs[2]_$divs[0]"];\n\t\t~;
				$VAR{a}++;
			} elsif($divs[2] eq "Checkbox"){
				@answers = split(/!LBCR!/, $divs[5]);
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					push(@rows, $adivs[0]);
				}
				@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
				
				$VAR{cbFields} = "";
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					if($adivs[0] =~ /\w+/ && ($adivs[1] =~ /\w+/ || $adivs[1] =~ /\-/)){
						$VAR{cbFields} .= qq~Surv_$divs[2]_$divs[0]\_$adivs[0],~;
					}
				}
				chop $VAR{cbFields};
				$VAR{script} .= qq~REQS[$VAR{a}] = ["$divs[2]","$VAR{cbFields}"];\n\t\t~;
				$VAR{a}++;
			} else {
				if($divs[9]){
					$VAR{script} .= qq~REQS[$VAR{a}] = ["email","Surv_$divs[2]_$divs[0]"];\n\t\t~;
					$VAR{a}++;
				} elsif($divs[2] eq "File"){
					unless($FORM{"Surv_$divs[2]_$divs[0]"}){
						$VAR{script} .= qq~REQS[$VAR{a}] = ["$divs[2]","Surv_$divs[2]_$divs[0]"];\n\t\t~;
						$VAR{a}++;
					}
				} else {
					$VAR{script} .= qq~REQS[$VAR{a}] = ["$divs[2]","Surv_$divs[2]_$divs[0]"];\n\t\t~;
					$VAR{a}++;
				}
			}
		}
		
		$VAR{script} .= qq~
		
		function checkF(f){
			for(t = 0; t < REQS.length; t++){
				if(REQS[t][0] == "Radio"){
					isRad = 0;
					for(r = 0; r < f[REQS[t][1]].length; r++){
						if(f[REQS[t][1]][r].checked){
							isRad++;
						}
					}
					if(!isRad){
						alert('$lang{PublicJSError}');
						f[REQS[t][1]][0].focus();
						if(document.all || document.getElementById){
							f[REQS[t][1]][0].style.background = "#ffff00";
						}
						return (false);
					}
				} else if(REQS[t][0] == "Checkbox"){
					cbFields = new Array();
					cbFields = REQS[t][1].split(",");
					isChk = 0;
					for(r = 0; r < cbFields.length; r++){
						if(f[cbFields[r]].checked){
							isChk++;
						}
					}
					if(!isChk){
						alert('$lang{PublicJSError}');
						f[cbFields[0]].focus();
						if(document.all || document.getElementById){
							f[cbFields[0]].style.background = "#ffff00";
						}
						return (false);
					}
				} else if(REQS[t][0] == "Select"){
					if(f[REQS[t][1]].selectedIndex < 1){
						alert('$lang{PublicJSError}');
						f[REQS[t][1]].focus();
						if(document.all || document.getElementById){
							f[REQS[t][1]].style.background = "#ffff00";
						}
						return (false);
					}
				} else if(REQS[t][0] == "email"){
					if(!checkem(f[REQS[t][1]].value)){
						alert('$lang{PublicJSEMError}');
						f[REQS[t][1]].focus();
						if(document.all || document.getElementById){
							f[REQS[t][1]].style.background = "#ffff00";
						}
						return (false);
					}
				} else {
					if(f[REQS[t][1]].value.length < 1){
						alert('$lang{PublicJSError}');
						f[REQS[t][1]].focus();
						if(document.all || document.getElementById){
							f[REQS[t][1]].style.background = "#ffff00";
						}
						return (false);
					}
				}
			}
		}
		
		// -->
		</script>
		~;
	}
	
	&PrintHead($VAR{id});
	
	print qq~
	<script language="JavaScript" type="text/javascript">
	<!--
	function showHideSupp(id, ans, sel){
		fld1  = "Sup1_" + id;
		fld2  = "Sup2_" + id;
		
		sel   = sel.replace(/\\s+/ig, "");
		sel   = sel.replace(/\\W+/ig, "");
		
		ANSWS = new Array();
		ANSWS = ans.split("::");
		
		showOrHide = 0;
		if(ANSWS.length){
			for(a = 0; a < ANSWS.length; a++){
				if(sel == ANSWS[a]){ showOrHide++; }
			}
		}
		
		if(showOrHide){
			document.getElementById(fld1).style.display = "block";
			document.getElementById(fld2).style.display = "block";
		} else {
			document.getElementById(fld1).style.display = "none";
			document.getElementById(fld2).style.display = "none";
		}
	}
	
	function showOnLoad(id, elemid){
		fld1  = "Sup1_" + id;
		fld2  = "Sup2_" + id;
		
		document.getElementById(fld1).style.display = "block";
		document.getElementById(fld2).style.display = "block";
	}
	// -->
	</script>
	~;
	
	if($CONFIG{live} == 2){
		print qq~$lang{PublicDiscont}~;
	} else {
		
		if($CONFIG{preview} == 1){
			$VAR{action} = qq~previewSurvey~;
			$VAR{button} = $lang{PublicSurveyPreview};
		} else {
			$VAR{action} = qq~processSurvey~;
			$VAR{button} = $lang{PublicSurveySubmit};
		}
		
		print qq~
		$VAR{script}
		<form action="$ScriptURL" method="post" enctype="multipart/form-data" $VAR{handler}>
		<input type="Hidden" name="id" value="$VAR{id}">
		<input type="Hidden" name="action" value="$VAR{action}">
		<table>
		<tr>
		<td colspan="2"><b>$name[1]</b></td>
		</tr>
		<tr>
		<td colspan="2">$CONFIG{qbreaker}</td>
		</tr>
		~;
		
		# pass protected?
		if($CONFIG{pass} =~ /\w+/){
			print qq~
			<tr>
			<td colspan="2"><b>$lang{PublicPass}</b></td>
			</tr>
			<tr>
			<td>&nbsp;</td>
			<td><input type="Password" name="Surv_pass" value="$FORM{Surv_pass}"></td>
			</tr>
			<tr>
			<td colspan="2">$CONFIG{qbreaker}</td>
			</tr>
			~;
		}
		
		$VAR{a} = 0;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			
			@answers = split(/!LBCR!/, $divs[5]);
			undef @rows;
			foreach(@answers){
				@adivs = split(/\:\:/, $_);
				push(@rows, $adivs[0]);
			}
			@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
			
			$divs[8] =~ s/!LBCR!/\n/ig;
			
			# hide supp quest?
			$VAR{hideSupp}       = 0;
			$VAR{matchJS}        = qq~~;
			$VAR{showSupp}       = qq~~;
			$VAR{showSelectSupp} = qq~~;
			
			if($divs[3] && $divs[13] == 2 && ($divs[2] eq "Radio" || $divs[2] eq "Checkbox")){
				$VAR{hideSupp} = 1;
				
				$divs[14] =~ s/\s+//ig;
				@match = split(/\:\:/, $divs[14]);
				
				foreach(@match){
					$VAR{match} = $_;
					$VAR{match} =~ s/\D+//ig;
					if($VAR{match} =~ /\w+/){ $VAR{matchJS} .= qq~$VAR{match}::~; }
				}
				chop $VAR{matchJS}; chop $VAR{matchJS};
				
				$VAR{showSupp} = qq~onclick="showHideSupp('$divs[0]', '$VAR{matchJS}', this.value);"~;
			}
			
			if($divs[3] && $divs[13] == 2 && $divs[2] eq "Select"){
				$VAR{hideSupp} = 1;
				
				$divs[14] =~ s/\s+//ig;
				@match = split(/\:\:/, $divs[14]);
				
				foreach(@match){
					$VAR{match} = $_;
					$VAR{match} =~ s/\D+//ig;
					if($VAR{match} =~ /\w+/){ $VAR{matchJS} .= qq~$VAR{match}::~; }
				}
				chop $VAR{matchJS}; chop $VAR{matchJS};
				
				$VAR{showSelectSupp} = qq~onchange="showHideSupp('$divs[0]', '$VAR{matchJS}', this.value);"~;
			}
			
			if($divs[8] =~ /\w+/){
				print qq~
				<tr>
				<td colspan="2">$divs[8]</td>
				</tr>
				~;
			}
			
			print qq~
			<tr>
			<td colspan="2"><b>$divs[4]</b></td>
			</tr>
			~;
			
			if($divs[2] eq "Radio"){
				if($divs[12] == 2){
					print qq~
					<tr><td colspan="2">
					~;
				}
				
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					if($adivs[0] =~ /\w+/ && ($adivs[1] =~ /\w+/ || $adivs[1] =~ /\-/)){
						$VAR{chkd} = $FORM{"Surv_$divs[2]_$divs[0]"} eq $adivs[0] ? qq~checked~ : qq~~;
					
						if($divs[12] == 2){
							print qq~
							<input type="Radio" name="Surv_$divs[2]_$divs[0]" value="$adivs[0]" $VAR{chkd} $VAR{showSupp} id="F\_$divs[0]\_$adivs[0]"> <label for="F\_$divs[0]\_$adivs[0]">$adivs[1]</label>
							~;
						} else {
							print qq~
							<tr>
							<td><input type="Radio" name="Surv_$divs[2]_$divs[0]" value="$adivs[0]" $VAR{chkd} $VAR{showSupp} id="F\_$divs[0]\_$adivs[0]"></td>
							<td><label for="F\_$divs[0]\_$adivs[0]">$adivs[1]</label></td>
							</tr>
							~;
						}
						
						if($VAR{showSupp}){
							@match = split(/\:\:/, $VAR{matchJS});
							
							foreach(@match){
								if($adivs[0] eq $_ && $FORM{"Surv_$divs[2]_$divs[0]"} eq $_){
									push(@matched, qq~showOnLoad('$divs[0]', 'F\_$divs[0]\_$adivs[0]');~);
								}
							}
						}
					}
				}
				if($divs[12] == 2){
					print qq~
					</td></tr>
					~;
				}
			} elsif($divs[2] eq "Checkbox"){
				if($divs[12] == 2){
					print qq~
					<tr><td colspan="2">
					~;
				}
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					$VAR{chkd} = $FORM{"Surv_$divs[2]_$divs[0]_$adivs[0]"} ? qq~checked~ : qq~~;
					if($adivs[0] =~ /\w+/ && ($adivs[1] =~ /\w+/ || $adivs[1] =~ /\-/)){
						if($divs[12] == 2){
							print qq~
							<input type="Checkbox" name="Surv_$divs[2]_$divs[0]_$adivs[0]" value="$adivs[0]" $VAR{chkd} $VAR{showSupp} id="F\_$divs[0]\_$adivs[0]"> <label for="F\_$divs[0]\_$adivs[0]">$adivs[1]</label>
							~;
						} else {
							print qq~
							<tr>
							<td><input type="Checkbox" name="Surv_$divs[2]_$divs[0]_$adivs[0]" value="$adivs[0]" $VAR{chkd} $VAR{showSupp} id="F\_$divs[0]\_$adivs[0]"></td>
							<td><label for="F\_$divs[0]\_$adivs[0]">$adivs[1]</label></td>
							</tr>
							~;
						}
						if($VAR{showSupp}){
							@match = split(/\:\:/, $VAR{matchJS});
							
							foreach(@match){
								if($adivs[0] eq $_ && $FORM{"Surv_$divs[2]_$divs[0]"} eq $_){
									push(@matched, qq~showOnLoad('$divs[0]', 'F\_$divs[0]\_$adivs[0]');~);
								}
							}
						}
					}
				}
				if($divs[12] == 2){
					print qq~
					</td></tr>
					~;
				}
			} elsif($divs[2] eq "Select"){
				$VAR{val} = $FORM{"Surv_$divs[2]_$divs[0]"};
				print qq~
				<tr>
				<td>&nbsp;</td>
				<td><select name="Surv_$divs[2]_$divs[0]" $VAR{showSelectSupp}>
				<option value="">$lang{PublicPleaseSelect}
				~;
				
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					if($adivs[0] =~ /\w+/ && ($adivs[1] =~ /\w+/ || $adivs[1] =~ /\-/)){
						$VAR{chkd} = $FORM{"Surv_$divs[2]_$divs[0]"} eq $adivs[0] ? qq~checked~ : qq~~;
						
						print qq~<option value="$adivs[0]">$adivs[1]\n~;
						
						if($VAR{showSelectSupp}){
							@match = split(/\:\:/, $VAR{matchJS});
							
							foreach(@match){
								if($adivs[0] eq $_ && $FORM{"Surv_$divs[2]_$divs[0]"} eq $_){
									push(@matched, qq~showOnLoad('$divs[0]', 'F\_$divs[0]\_$adivs[0]');~);
								}
							}
						}
					}
				}
				
				print qq~
				</select></td>
				</tr>
				~;
			} elsif($divs[2] eq "Text"){
				$VAR{val} = $FORM{"Surv_$divs[2]_$divs[0]"};
				print qq~
				<tr>
				<td>&nbsp;</td>
				<td><input type="Text" name="Surv_$divs[2]_$divs[0]" value="$VAR{val}"></td>
				</tr>
				~;
			} elsif($divs[2] eq "Textarea"){
				$VAR{val} = $FORM{"Surv_$divs[2]_$divs[0]"};
				$VAR{val} =~ s/<br>/\n/ig;
				print qq~
				<tr>
				<td>&nbsp;</td>
				<td><textarea cols="40" rows="4" name="Surv_$divs[2]_$divs[0]">$VAR{val}</textarea></td>
				</tr>
				~;
			} elsif($divs[2] eq "File"){
				if($FORM{"Surv_$divs[2]_$divs[0]"}){
					# get dir 
					@path = getline('def_url', "$Data$S{S}$FORM{id}$S{S}config\.ftf");
					$VAR{File} = $FORM{"Surv_$divs[2]_$divs[0]"};
					$VAR{File} =~ s/^.*(\\|\/)//;
					$VAR{File} = qq~<a href="$path[1]/$VAR{File}" target="_blank">$VAR{File}</a>~;
					print qq~
					<tr>
					<td>&nbsp;</td>
					<td><input type="File" name="Surv_$divs[2]_$divs[0]"> $VAR{File}
					<input type="Hidden" name="Surv_$divs[2]_$divs[0]_HiddenFile" value="$FORM{"Surv_$divs[2]_$divs[0]"}"></td>
					</tr>
					~;
				} else {
					print qq~
					<tr>
					<td>&nbsp;</td>
					<td><input type="File" name="Surv_$divs[2]_$divs[0]"></td>
					</tr>
					~;
				}
			}
			
			if($divs[3]){
				$VAR{val} = $FORM{"Surv_X_$divs[0]"};
				if($VAR{hideSupp}){
					print qq~
					<tr class="hiddenSupp" id="Sup1_$divs[0]">
					<td>&nbsp;</td>
					<td>$divs[3]</td>
					</tr>
					<tr class="hiddenSupp" id="Sup2_$divs[0]">
					<td>&nbsp;</td>
					<td><input type="Text" name="Surv_X_$divs[0]" value="$VAR{val}"></td>
					</tr>
					~;
				} else {
					print qq~
					<tr>
					<td>&nbsp;</td>
					<td>$divs[3]</td>
					</tr>
					<tr>
					<td>&nbsp;</td>
					<td><input type="Text" name="Surv_X_$divs[0]" value="$VAR{val}"></td>
					</tr>
					~;
				}
			}
			
			print qq~
			<tr>
			<td colspan="2">$CONFIG{qbreaker}</td>
			</tr>
			~;
		}
		
		print qq~
		<tr>
		<td colspan="2"><input type="Submit" value="$VAR{button}"></td>
		</tr>
		</table>
		</form>
		~;
	}
	
	print qq~
	<script>
	<!--
	~;
	
	foreach(@matched){ print qq~$_\n\t~; }
	
	print qq~
	// -->
	</script>
	~;
	
	&PrintFoot($VAR{id});
}

#################################################################### 

#################################################################### 

sub previewSurvey {
	my ( $atts, @files, @success, $selected, @ar, @adm, %VAR, @name );
	my ( %TMP, @todel, %hash, @UID, @questions, @divs, @answers, @match );
	
	unless($FORM{id} =~ /\d+/){
		&PrintHead();
		
		print qq~
		<table width="500">
		<tr>
		<td><font face="Arial" size="2">$lang{PublicNoID}
		<br>
		<br>
		&lt;input type="Hidden" name="<font color="#ff0000"><b>id</b></font>" value="<font color="#ff0000"><b>1092834532</b></font>">
		</font></td>
		</tr>
		</table>~;
		
		&PrintFoot();
		exit;
	}
	
	if($CONFIG{live} == 2){
		&PrintHead($FORM{id});
		
		print qq~$lang{PublicDiscont}~;
		
		&PrintFoot($FORM{id});
		exit;
	}
	
	if($CONFIG{pass} ne $FORM{Surv_pass}){
		&PrintHead($FORM{id});
		
		print qq~
		<table width="500">
		<tr>
		<td class="cell">$lang{PublicBadPass}</td>
		</tr>
		<tr><form>
		<td><br><input type="Button" value="$lang{PublicBackButton}" onclick="history.back();" style="cursor:hand;"></td>
		</tr></form>
		</table>~;
		
		&PrintFoot($FORM{id});
		exit;
	}

	foreach(keys %FORM){
		if($_ =~ /^Surv_File\_\d+$/ && $FORM{$_} =~ /\w/){
			push(@files, $_);
		} elsif($_ =~ /_HiddenFile$/ && $FORM{$_} =~ /\w/){
			$VAR{_HiddenFile}++;
		}
	}
	
	# upload any files entered for uploading
	foreach (@files){ 
		# upload each file, pass the form field NAME if it has a value
		if($FORM{$_}){
			
			# if the form field contains a file name &psjs_upload subroutine
			# the file's name and path are passed to the subroutine 
			$VAR{returned} = &psjs_upload($FORM{$_},$FORM{destination}); 
			
			if($VAR{returned} =~ /^$lang{UploadSuccess}/i){
				# if the $VAR{returned} message begins with "Success" the upload was succssful
				# remove the word "Success" and any spaces and we're left with the filename   
				$VAR{returned} =~ s/^$lang{UploadSuccess}\s+//;
				push(@success, $VAR{returned});
			} else {
				# else if the word "success" is not returned, the message is the error encountered. 
				# add the error to the $VAR{failed} scalar
				$VAR{failed} .= $VAR{returned};
			}
			$selected++; # increment num of files selected for uploading by user
		}
	}
	
	unless($VAR{_HiddenFile}){
		if($CONFIG{attach} == 1){
			if(!$selected){
				# no files were selected by user, so nothing is returned to either variable
				$VAR{failed} .= qq~$lang{PublicNoFiles}~;
			}
		}
	}
	
	if($VAR{failed}){
		&PrintHead($FORM{id});
		
		$VAR{failed} = qq~
		<table width="500">
		<tr>
		<td class="cell">$lang{PublicUploadFailure}
		<p>
		$VAR{failed}</td>
		</tr>
		</table>
		~;
		
		print qq~$VAR{failed}~;
		
		&PrintFoot($FORM{id});
		exit;
	} 
	
	@name = getline($FORM{id}, "$Data$S{S}data$S{S}details\.list");
	$VAR{name} = $name[1];
	
	@questions = getfile("$Data$S{S}$FORM{id}$S{S}questions\.list");
	undef @rows;
	foreach(@questions){
		@divs = split(/\|\|/, $_);
		$quest{$divs[0]} = $divs[4];
		push(@rows, $divs[1]);
		
		if($divs[9]){
			$VAR{emailFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
		if($divs[10]){
			$VAR{fnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
		if($divs[11]){
			$VAR{lnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
		if($divs[16]){
			$VAR{dupeFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
	}
	
	if($FORM{$VAR{dupeFLD}} && $VAR{dupeFLD}){
		$FORM{$VAR{dupeFLD}} =~ s/\-//ig;
		$FORM{$VAR{dupeFLD}} =~ s/\s+//ig;
		# check for duplicate entries
		@subs = getfile("$Data$S{S}$FORM{id}$S{S}subs\.list");
		
		foreach(@subs){
			%divs = split(/\|\|/, $_);
			if($divs{$VAR{dupeFLD}} eq $FORM{$VAR{dupeFLD}}){
				$VAR{exists} = 1;
				last;
			}
		}
		
		if($VAR{exists}){
			&PrintHead($FORM{id});
			
			print qq~
			<table align="center" width="500">
			<tr>
			<td class="cell">$lang{PublicDuplicate}</td>
			</tr>
			<tr><form>
			<td><br><input type="Button" value="$lang{PublicBackButton}" onclick="history.back();" style="cursor:hand;"></td>
			</tr></form>
			</table>~;
			
			&PrintFoot($FORM{id});
			exit;
		}
	}
	
	$VAR{fnameFLD} ||= $VAR{emailFLD};
	
	@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
	
	if($CONFIG{preview} == 1){
		$VAR{action} = qq~previewSurvey~;
		$VAR{button} = $lang{PublicSurveyPreview};
	} else {
		$VAR{action} = qq~processSurvey~;
		$VAR{button} = $lang{PublicSurveySubmit};
	}
	
	&PrintHead($FORM{id});
	
	print qq~
	<table align="center" border="0" cellpadding="0" cellspacing="0" width="660">
	<tr><td>$lang{PublicSurveyInst}</td></tr>
	</table>
	<br>
	
	<table align="center" border="0" cellpadding="3" cellspacing="0" width="660">
	<tr bgcolor="$bg1">
	<td colspan="2"><b>$lang{ViewSubQuestions}</b></td>
	</tr>
	~;
	
	foreach(@questions){
		@divs = split(/\|\|/, $_);
		
		print qq~
		<tr bgcolor="$bg2">
		<td colspan="2">$divs[4]</td>
		</tr>
		~;
		
		if($divs[2] eq "Text" || $divs[2] eq "File" || $divs[2] eq "Textarea"){
			if($divs[9]){
				# set values
				$VAR{fnameVAL}   = $FORM{$VAR{fnameFLD}};
				$VAR{fnameVAL} ||= $FORM{$VAR{emailFLD}};
				
				print qq~
				<tr>
				<td nowrap> &nbsp;</td>
				<td><a href="mailto:$VAR{fnameVAL} $FORM{$VAR{lnameFLD}} <$FORM{"Surv_$divs[2]_$divs[0]"}>" class="green">$FORM{"Surv_$divs[2]_$divs[0]"}</a></td>
				</tr>
				~;
			} elsif($divs[2] eq "File"){
				# get dir 
				@path = getline('def_url', "$Data$S{S}$FORM{id}$S{S}config\.ftf");
				$FORM{"Surv_$divs[2]_$divs[0]"} ||= $FORM{"Surv_$divs[2]_$divs[0]_HiddenFile"};
				$FORM{"Surv_$divs[2]_$divs[0]"} =~ s/^.*(\\|\/)//;
				print qq~
				<tr>
				<td nowrap> &nbsp;</td>
				<td><a href="$path[1]/$FORM{"Surv_$divs[2]_$divs[0]"}" target="_blank">$FORM{"Surv_$divs[2]_$divs[0]"}</a></td>
				</tr>
				~;
			} else {
				$VAR{val} = $FORM{"Surv_$divs[2]_$divs[0]"};
				$VAR{val} =~ s/\n/<br>/ig;
				print qq~
				<tr>
				<td nowrap> &nbsp;</td>
				<td>$VAR{val}</td>
				</tr>
				~;
			}
			
			if($divs[3]){
				$VAR{val} = $FORM{"Surv_X_$divs[0]"};
				print qq~
				<tr>
				<td colspan="2">$divs[3]</td>
				</tr>
				<tr>
				<td>&nbsp;</td>
				<td>$VAR{val}</td>
				</tr>
				~;
			}
		} else {
			@answers = split(/!LBCR!/, $divs[5]);
			
			undef @rows;
			foreach(@answers){
				@adivs = split(/\:\:/, $_);
				push(@rows, $adivs[0]);
			}
			@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
			
			# hide supp quest?
			$VAR{showSupp} = 0;
			$VAR{matchJS}  = qq~~;
			
			$divs[14] =~ s/\s+//ig;
			@match = split(/\:\:/, $divs[14]);
			
			foreach(@match){
				$VAR{match} = $_;
				$VAR{match} =~ s/\D+//ig;
				if($VAR{match} =~ /\w+/){ $VAR{matchJS} .= qq~$VAR{match}::~; }
			}
			chop $VAR{matchJS}; chop $VAR{matchJS};
			
			@match = split(/\:\:/, $VAR{matchJS});
			
			$VAR{a} = 0;
			foreach(@answers){
				$VAR{bg} = $VAR{a} % 2 == 0 ? qq~$bg2~ : qq~$bg3~;
				@adivs = split(/\:\:/, $_);
				
				print qq~
				<tr>
				~;
				
				if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]"} || $adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]\_$adivs[0]"}){
					print qq~
					<td align="right"><font color="#ff0000"><b>&gt;</b></font></td>
					<td><b>$adivs[1]</b></td>
					~;
					
					foreach(@match){
						if($adivs[0] eq $_){ $VAR{showSupp} = 1; }
					}
					
				} else {
					print qq~
					<td nowrap> &nbsp;</td>
					<td>$adivs[1]</td>
					~;
				}
				
				print qq~
				</tr>
				~;
				$VAR{a}++;
			}
			
			if($divs[3] && $VAR{showSupp}){
				$VAR{val} = $FORM{"Surv_X_$divs[0]"};
				print qq~
				<tr>
				<td colspan="2">$divs[3]</td>
				</tr>
				<tr>
				<td>&nbsp;</td>
				<td>$VAR{val}</td>
				</tr>
				~;
			}
		}
	}
	
	print qq~
	</table>
	<br>
	
	<table align="center" border="0" cellpadding="0" cellspacing="0" width="660">
	<tr>
	<td width="300">
	<form action="$ScriptURL" method="post" enctype="multipart/form-data">
	<input type="Hidden" name="action" value="viewSurvey">
	<input type="Hidden" name="isEdit" value="1">
	~;
	
	foreach(keys %FORM){
		unless($_ eq "action"){
			print qq~
			<input type="Hidden" name="$_" value="$FORM{$_}">
			~;
		}
	}
	
	print qq~
	<input type="Submit" value="$lang{PublicSurveyEdit}" style="width:120px;">
	</form>
	</td>
	<td width="60"> &nbsp; &nbsp;</td>
	<td align="right" width="300">
	<form action="$ScriptURL" method="post" enctype="multipart/form-data">
	<input type="Hidden" name="action" value="processSurvey">
	~;
	
	foreach(keys %FORM){
		unless($_ eq "action"){
			print qq~
			<input type="Hidden" name="$_" value="$FORM{$_}">
			~;
		}
	}
	
	print qq~
	<input type="Submit" value="$lang{PublicSurveySubmit}" style="width:120px;">
	</form>
	</td>
	</tr>
	</table>
	~;
	
	&PrintFoot($FORM{id});
}

#################################################################### 

#################################################################### 

sub processSurvey {
	my ( $atts, @files, @success, $selected, @ar, @adm, %VAR, @thankstemplate, %TMP, @name );
	my ( @todel, %hash, @UID, @questions, @divs, @answers, @adivs, %remarks, @rdivs, @remarks );
	my ( @cats, %catQuests, %catScore, %catTotal, %cat );
	
	unless($FORM{id} =~ /\d+/){
		&PrintHead();
		
		print qq~
		<table width="500">
		<tr>
		<td><font face="Arial" size="2">$lang{PublicNoID}
		<br>
		<br>
		&lt;input type="Hidden" name="<font color="#ff0000"><b>id</b></font>" value="<font color="#ff0000"><b>1092834532</b></font>">
		</font></td>
		</tr>
		</table>~;
		
		&PrintFoot();
		exit;
	}
	
	if($CONFIG{live} == 2){
		&PrintHead($FORM{id});
		
		print qq~$lang{PublicDiscont}~;
		
		&PrintFoot($FORM{id});
		exit;
	}
	
	if($CONFIG{pass} ne $FORM{Surv_pass}){
		&PrintHead($FORM{id});
		
		print qq~
		<table width="500">
		<tr>
		<td class="cell">$lang{PublicBadPass}</td>
		</tr>
		<tr><form>
		<td><br><input type="Button" value="$lang{PublicBackButton}" onclick="history.back();" style="cursor:hand;"></td>
		</tr></form>
		</table>~;
		
		&PrintFoot($FORM{id});
		exit;
	}
	
	@name    = getline($FORM{id}, "$Data$S{S}data$S{S}details\.list");
	@questions = getfile("$Data$S{S}$FORM{id}$S{S}questions\.list");
	
	foreach(@questions){
		@divs = split(/\|\|/, $_);
		if($divs[9]){
			$VAR{emailFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
		if($divs[10]){
			$VAR{fnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
		if($divs[11]){
			$VAR{lnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
		}
	}
	
	if($FORM{$VAR{emailFLD}}){
		unless(check_email($FORM{$VAR{emailFLD}})){
			&PrintHead($FORM{id});
			
			print qq~
			<table width="500">
			<tr>
			<td class="cell">$lang{PublicBadEmail}</td>
			</tr>
			<tr><form>
			<td><br><input type="Button" value="$lang{PublicBackButton}" onclick="history.back();" style="cursor:hand;"></td>
			</tr></form>
			</table>~;
			
			&PrintFoot($FORM{id});
			exit;
		}
	}
	
	if($VAR{missing}){
		$VAR{missing} = qq~<font color="#ff0000">$lang{PublicMissed}</font>
		<p>
		$VAR{mfields}
		~;
	
		&PrintHead($FORM{id});
		
		print qq~
		<table width="500">
		<tr>
		<td class="cell">$VAR{missing}</td>
		</tr>
		<tr><form>
		<td><br><input type="Button" value="$lang{PublicBackButton}" onclick="history.back();" style="cursor:hand;"></td>
		</tr></form>
		</table>~;
		
		&PrintFoot($FORM{id});
		exit;
	}
	
	unless($CONFIG{preview} == 1){
		# files yet to be uploaded
		foreach(keys %FORM){
			if($_ =~ /^Surv_File\_\d+$/ && $FORM{$_} =~ /\w/){
				push(@files, $_);
			}
		}
		
		# upload any files entered for uploading
		foreach (@files){ 
			# upload each file, pass the form field NAME if it has a value
			if($FORM{$_}){
				
				# if the form field contains a file name &psjs_upload subroutine
				# the file's name and path are passed to the subroutine 
				$VAR{returned} = &psjs_upload($FORM{$_},$FORM{destination}); 
				
				if($VAR{returned} =~ /^$lang{UploadSuccess}/i){
					# if the $VAR{returned} message begins with "Success" the upload was succssful
					# remove the word "Success" and any spaces and we're left with the filename   
					$VAR{returned} =~ s/^$lang{UploadSuccess}\s+//;
					push(@success, $VAR{returned});
				} else {
					# else if the word "success" is not returned, the message is the error encountered. 
					# add the error to the $VAR{failed} scalar
					$VAR{failed} .= $VAR{returned};
				}
				$selected++; # increment num of files selected for uploading by user
			}
		}
		
		if($CONFIG{attach} == 1){
			if(!$selected){
				# no files were selected by user, so nothing is returned to either variable
				$VAR{failed} .= qq~$lang{PublicNoFiles}~;
			}
		}
		
		if($VAR{failed}){
			&PrintHead($FORM{id});
			
			$VAR{failed} = qq~
			<table width="500">
			<tr>
			<td class="cell">$lang{PublicUploadFailure}
			<p>
			$VAR{failed}</td>
			</tr>
			</table>
			~;
			
			print qq~$VAR{failed}~;
			
			&PrintFoot($FORM{id});
			exit;
		} 
	}
	
	if($success[0] || $CONFIG{attach} == 2 || $CONFIG{preview} == 2){
		# upload was successful
		@UID = getfile("$Data$S{S}$FORM{id}$S{S}uid\.list");
		unless($UID[0]){
			$UID[0] = $CONFIG{startuid};
		}
		$UID[0]++;
		
		if(open(N, ">$Data$S{S}$FORM{id}$S{S}uid\.list")){
			flock(N, 2);
			print N qq~$UID[0]~;
			close N;
		}
		
		# prepare special markers
		foreach(@success){
			$VAR{files} .= qq~$_\n~;
		}
		chop $VAR{files};
		$FORM{Files}    = $VAR{files};
		$FORM{Date}     = $offset;
		$FORM{UID}      = qq~$UID[0]~;
		$FORM{IP}       = $ENV{REMOTE_ADDR};
		$FORM{Host}     = &gethostname;
		$FORM{Agent}    = $ENV{HTTP_USER_AGENT};
		$FORM{Referrer} = $ENV{HTTP_REFERER};
		
		# prepare arg for attachments
		if($success[0]){
			$FORM{destination} ||= $CONFIG{def_dir};
			$FORM{destination}   =~ s/(\/|\\)$//ig;
		
			foreach(@success){
				$atts .= qq~$FORM{destination}$S{S}$_||~;
				push(@todel, qq~$FORM{destination}$S{S}$_~);
			}
		}
		
		$CONFIG{adminemail} =~ s/\s+//ig;
		$CONFIG{adminemail} =~ s/\s+//ig;
		@admemails = split(/\,/, $CONFIG{adminemail});
		@admnames  = split(/\,/, $CONFIG{adminname});
		
		# email names and fields
		$VAR{usrname}    = $FORM{$VAR{fnameFLD}} =~ /\w+/ ? qq~$FORM{$VAR{fnameFLD}} $FORM{$VAR{lnameFLD}}~ : '';
		$VAR{usremail}   = $FORM{$VAR{emailFLD}} =~ /\w+/ ? $FORM{$VAR{emailFLD}} : $admemails[0];
		$VAR{arsubject}  = $CONFIG{arsubject};
		$VAR{admsubject} = $CONFIG{admsubject};
		
		# submission data, store after score has been computed
		foreach(sort(keys %FORM)){
			@divs = split(/\_/, $_);
			unless($_ eq "destination" || $_ eq "id" || $_ eq "required" || $_ eq "isEdit" || $_ =~ /_HiddenFile$/){
				$hash{$_} = $FORM{$_};
				if($_ =~ /^Surv\_File/){
					$hash{$_} =~ s/^.*(\\|\/)//;
				}
			}
		}
		
		# format date and contact fields after they have been stored
		%TMP = %FORM;
		$TMP{Date}     = &getDate($FORM{Date});
		$TMP{email}    = $FORM{$VAR{emailFLD}};
		$TMP{fname}    = $FORM{$VAR{fnameFLD}};
		$TMP{lname}    = $FORM{$VAR{lnameFLD}};
		
		# get n sort cats
		@cats = &getfile("$Data$S{S}$FORM{id}$S{S}cats.ftf");
		
		foreach(@cats){
			@divs = split(/\|\|/, $_); 
			push(@rows, $divs[2]);
			
			$divs[1] =~ s/<\*br\*>/ /ig;
			$cat{$divs[0]} = $divs[1];
			# define cats
			$catQuests{$divs[0]} = 0;
		}
		@cats = @cats[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
		
		$TMP{HTMLsnapshot} = qq~
		<table>
		<tr>
		<td colspan="2">$FONT<b>$name[1]</b></font></td>
		</tr>
		<tr>
		<td colspan="2">$CONFIG{qbreaker}</td>
		</tr>
		~;
		
		# create temp hash for thank you page/autoresponders
		undef @rows;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			$quest{$divs[0]} = $divs[4];
			push(@rows, $divs[1]);
		}
		@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
		
		$VAR{maxScore} = 0;
		$VAR{totalScore} = 0;
		foreach(@questions){
			@divs = split(/\|\|/, $_);
			
			if($divs[2] eq "Radio" || $divs[2] eq "Checkbox" || $divs[2] eq "Select"){
				# count num qs in each
				$catQuests{$divs[15]}++;
			}
			
			if($divs[2] eq "File"){
				@path = getline('def_url', "$Data$S{S}$FORM{id}$S{S}config\.ftf");
				if($TMP{"Surv_$divs[2]_$divs[0]"}){
					$TMP{"Surv_$divs[2]_$divs[0]"} =~ s/^.*(\\|\/)//;
					$TMP{"Surv_$divs[2]_$divs[0]"} = qq~isFile$path[1]/$TMP{"Surv_$divs[2]_$divs[0]"}~;
				} else {
					$TMP{"Surv_$divs[2]_$divs[0]"} = qq~~;
				}
			} elsif($divs[2] eq "Radio"){
				@answers = split(/!LBCR!/, $divs[5]);
				undef @rows;
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					push(@rows, $adivs[0]);
				}
				@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
				
				$VAR{highScore} = 0;
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					
					if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]"}){
						$TMP{"Surv_$divs[2]_$divs[0]"} = $adivs[1];
						$VAR{totalScore} += $adivs[2];
						$catScore{$divs[15]} += $adivs[2];
					}
					$VAR{highScore} = $adivs[2] > $VAR{highScore} ? $adivs[2] : $VAR{highScore};
				}
				
				$VAR{maxScore} += $VAR{highScore};
				$catTotal{$divs[15]} += $VAR{highScore};
			} elsif($divs[2] eq "Select"){
				@answers = split(/!LBCR!/, $divs[5]);
				undef @rows;
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					push(@rows, $adivs[0]);
				}
				@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
				
				$VAR{highScore} = 0;
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					
					if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]"}){
						$TMP{"Surv_$divs[2]_$divs[0]"} = $adivs[1];
						$VAR{totalScore} += $adivs[2];
						$catScore{$divs[15]} += $adivs[2];
					}
					$VAR{highScore} = $adivs[2] > $VAR{highScore} ? $adivs[2] : $VAR{highScore};
				}
				
				$VAR{maxScore} += $VAR{highScore};
				$catTotal{$divs[15]} += $VAR{highScore};
			} elsif($divs[2] eq "Checkbox"){
				@answers = split(/!LBCR!/, $divs[5]);
				
				undef @rows;
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					push(@rows, $adivs[0]);
				}
				@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
				
				foreach(@answers){
					@adivs = split(/\:\:/, $_);
					
					if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]\_$adivs[0]"} && $FORM{"Surv_$divs[2]_$divs[0]\_$adivs[0]"}){
						$TMP{"Surv_$divs[2]_$divs[0]"} .= qq~$adivs[1]<br>~;
						$VAR{totalScore} += $adivs[2];
						$catScore{$divs[15]} += $adivs[2];
					}
					$VAR{maxScore} += $adivs[2];
					$catTotal{$divs[15]} += $adivs[2];
				}
				
				chop $TMP{"Surv_$divs[2]_$divs[0]"}; chop $TMP{"Surv_$divs[2]_$divs[0]"};
				chop $TMP{"Surv_$divs[2]_$divs[0]"}; chop $TMP{"Surv_$divs[2]_$divs[0]"};
				if($CONFIG{mail_format} == 1){
					#$TMP{"Surv_$divs[2]_$divs[0]"} =~ s/<br>/<br>\n/ig;
				} else {
					$TMP{"Surv_$divs[2]_$divs[0]"} =~ s/<br>/\n/ig;
				}
			}
			
			$VAR{HTML} = $TMP{"Surv_$divs[2]_$divs[0]"};
			$VAR{HTML} =~ s/\n/<br>/ig;
			$VAR{HTML} =~ s/^isFile(.*)/<a href="$1" target="_blank">$1<\/a>/ig;
			
			$VAR{Text} = $TMP{"Surv_$divs[2]_$divs[0]"};
			$VAR{Text} =~ s/\n/\n    /ig;
			$VAR{Text} =~ s/^isFile(.*)/$1/ig;
			
			$TMP{HTMLsnapshot} .= qq~
			<tr>
			<td colspan="2">$FONT<b>$divs[4]</b></font></td>
			</tr>
			<tr>
			<td nowrap> &nbsp; &nbsp;</td>
			<td>$FONT $VAR{HTML}</font></td>
			</tr>
			~;
			
			if($divs[3]){
				$TMP{HTMLsnapshot} .= qq~
				<tr>
				<td colspan="2">$FONT $divs[3] </font></td>
				</tr>
				<tr>
				<td nowrap> &nbsp; &nbsp;</td>
				<td>$FONT $TMP{"Surv_X_$divs[0]"}</font></td>
				</tr>
				~;
			}
			
			$TMP{HTMLsnapshot} .= qq~
			<tr>
			<td colspan="2">$CONFIG{qbreaker}</td>
			</tr>
			~;
			
			$TMP{Textsnapshot} .= qq~$divs[4]\n    $VAR{Text}\n\n~;
			if($divs[3]){
				$TMP{Textsnapshot} .= qq~    $divs[3]\n        $TMP{"Surv_X_$divs[0]"}\n\n~;
			}
		}
		
		# graph data
		$VAR{data}   = qq~~;
		$VAR{labels} = qq~~;
		foreach(@cats){
			@divs = split(/\|\|/, $_);
			
			# get labels for graph
			$divs[1] =~ s/\&//ig;
			$divs[1] =~ s/\,/ /ig;
			
			# get percentage of score
			if($catScore{$divs[0]} > 0 && $catTotal{$divs[0]} > 0){
				$VAR{perc} = $catScore{$divs[0]} / $catTotal{$divs[0]} * 100;
			} else {
				$VAR{perc} = 0;
			}
			
			$VAR{data}   .= qq~$VAR{perc},~;
			
			$VAR{labels} .= qq~$divs[1]~;
			if($CONFIG{datashow} == 1){
				$VAR{labels} .= qq~<*br*>$catScore{$divs[0]} of $catTotal{$divs[0]} ($VAR{perc}%)~;
			}
			$VAR{labels} .= qq~,~;
			
			#print qq~$_ -> $catQuests{$divs[0]} -> $catScore{$divs[0]} -> $catTotal{$divs[0]}<br><br>\n~;
		}
		chop $VAR{data};
		chop $VAR{labels};
		
		$VAR{labels} =~ s/\&/\+/ig;
		
		$TMP{HTMLsnapshot} .= qq~
		</table>
		~;
		
		if($VAR{totalScore} && $VAR{maxScore} == $VAR{totalScore}){
			$VAR{perc} = qq~100~;
		} elsif($VAR{totalScore} && $VAR{maxScore} == 0){
			$VAR{perc} = qq~0~;
		} elsif($VAR{totalScore} && $VAR{maxScore}){
			$VAR{perc} = $VAR{totalScore} * 100 / $VAR{maxScore};
		}
		
		if($VAR{perc}){
			@remarks = &getfile("$Data$S{S}$FORM{id}$S{S}remarkstemplate\.ftf");
			unless($remarks[0] || $remarks[1] || $remarks[2]){ @remarks = &getRemarks; }
			foreach(@remarks){
				@rdivs = split(/\=/, $_);
				$VAR{str} = qq~~;
				for($a = 1; $a < @rdivs; $a++){
					$VAR{str} .= qq~$rdivs[$a]\=~;
				}
				chop $VAR{str};
				$remarks{$rdivs[0]} = $VAR{str};
			}
			$VAR{remark} = $remarks{int($VAR{perc})};
			$VAR{perc}   = sprintf("%5.2f", $VAR{perc});
			$VAR{perc}  .= qq~%~;
		} else {
			$VAR{perc}   = qq~N/A~;
		}
		
		# store full results to submissions db
		$hash{Entry_ID}    = time;
		$hash{Survey_ID}   = $name[0];
		$hash{Survey_Name} = $name[1];
		$hash{Score}       = $VAR{totalScore};
		$hash{MaxScore}    = $VAR{maxScore};
		$hash{Percentage}  = $VAR{perc};
		
		$hash{Score}       = sprintf("%5.2f", $hash{Score});
		$hash{MaxScore}    = sprintf("%5.2f", $hash{MaxScore});
	
		$TMP{Score}        = $hash{Score};
		$TMP{MaxScore}     = $hash{MaxScore};
		$TMP{Percentage}   = $hash{Percentage};
		$TMP{Remark}       = $VAR{remark};
		
		&store_results(%hash);
		
		$VAR{str} = qq~$ENV{REMOTE_ADDR}||$hash{Entry_ID}~;
		if($ENV{REMOTE_ADDR} =~ /\w+/){
			&fileadd("$Data$S{S}$FORM{id}$S{S}$FORM{id}\_ips.list", $VAR{str});
		}
		# store cookie also
		&SetPermCookies("eSurv_$FORM{id}", $VAR{str});
		
		# remove HTML from Plain Text mail
		if($CONFIG{mail_format} == 1){
			$TMP{snapshot} = $TMP{HTMLsnapshot};
			$TMP{ResultsLink}  = qq~<a href="$ScriptURL?action=viewResults&id=$FORM{id}">View Results</a>~;
			$TMP{GroupGraphImage} = qq~<img src="$polarURL?labels=$VAR{labels}&data=$VAR{data}&colors=$bg1,$bg2,$bg3" border="0" width="460" height="460" alt="">~;
			$TMP{GroupGraphLink} = qq~<a href="$polarURL?labels=$VAR{labels}&data=$VAR{data}">View Graph</a>~;
		} else {
			$TMP{snapshot} = $TMP{Textsnapshot};
			$TMP{ResultsLink}  = qq~$ScriptURL?action=viewResults&id=$FORM{id}~;
			$TMP{GroupGraphLink} = qq~$polarURL?labels=$VAR{labels}&data=$VAR{data}~;
		}
		
		# admin notif
		if(check_email($admemails[0]) && $CONFIG{notify} == 1){
			@adm = getfile("$Data$S{S}$FORM{id}$S{S}admtemplate.ftf");
	
			foreach(@adm){ $VAR{adm} .= qq~$_\n~; }
			
			foreach(keys %TMP){ $VAR{adm} =~ s/%%%$_%%%/$TMP{$_}/ig; }
			
			$VAR{admmessage} = qq~$VAR{adm}~;
			$VAR{admmessage} =~ s/%%%.*?%%%//ig;
			
			# admin subject
			foreach(keys %TMP){ $VAR{admsubject} =~ s/%%%$_%%%/$TMP{$_}/ig; }
			
			$VAR{admsubject} =~ s/%%%.*?%%%//ig;
			$VAR{admsubject} =~ s/\n//ig;
			$VAR{admsubject} =~ s/\r//ig;
			
			for($a = 0; $a < @admemails; $a++){
				if(&send_mail($VAR{usremail}, $VAR{usrname}, $admemails[$a], $admnames[$a], $VAR{admsubject}, $VAR{admmessage}, "", "", $atts)){
					$VAR{sent}++;
				}
			}
		}
		
		$VAR{arAtts} = $CONFIG{arfiles};
		
		# start autoresponder
		if($CONFIG{usear} == 1){
			if(check_email($admemails[0]) && check_email($VAR{usremail})){
				@ar = getfile("$Data$S{S}$FORM{id}$S{S}artemplate.ftf");
			
				if(@ar){
					foreach(@ar){ $VAR{ar} .= qq~$_\n~; }
					
					foreach(keys %TMP){ $VAR{ar} =~ s/%%%$_%%%/$TMP{$_}/ig; }
					
					$VAR{armessage} = qq~$VAR{ar}~;
					$VAR{armessage} =~ s/%%%.*?%%%//ig;
					
					# ar subject
					foreach(keys %TMP){ $VAR{arsubject} =~ s/%%%$_%%%/$TMP{$_}/ig; }
					
					$VAR{arsubject} =~ s/%%%.*?%%%//ig;
					$VAR{arsubject} =~ s/\n//ig;
					$VAR{arsubject} =~ s/\r//ig;
					
					if(&send_mail($admemails[0], $admnames[0], $VAR{usremail}, $VAR{usrname}, $VAR{arsubject}, $VAR{armessage}, "", "", $VAR{arAtts})){
						$VAR{sent}++;
					}
				}
			}
		}
	}
	
	if($CONFIG{delfile} == 1){ foreach(@todel){ unlink($_); } }
	
	# redefine res link for thank you page
	$TMP{ResultsLink}  = qq~<a href="$ScriptURL?action=viewResults&id=$FORM{id}">View Results</a>~;
	$TMP{GroupGraphLink} = qq~<a href="$polarURL?labels=$VAR{labels}&data=$VAR{data}">View Graph</a>~;
	$TMP{GroupGraphImage} = qq~<img src="$polarURL?labels=$VAR{labels}&data=$VAR{data}&colors=$bg1,$bg2,$bg3" border="0" width="460" height="460" alt="">~;
	
	if($VAR{failed}){
		&PrintHead($FORM{id});
		
		print qq~$VAR{failed}~;
		
		&PrintFoot($FORM{id});
	} else {
		
		if($FORM{redirect} =~ /^http/i){
			# redirect user
			print qq~Location: $FORM{redirect}\n\n~;
		} elsif($CONFIG{redirect} =~ /^http/i){
			# redirect user
			print qq~Location: $CONFIG{redirect}\n\n~;
		} else {
			# print success page
			&PrintHead($FORM{id});	
			
			@thankstemplate = getfile("$Data$S{S}$FORM{id}$S{S}thankstemplate.ftf");
			
			# use HTML version for Thank You page
			$TMP{snapshot} = $TMP{HTMLsnapshot};
			foreach(@thankstemplate){
				$VAR{thankstemplate} .= qq~$_\n~;
			}
			
			foreach(keys %TMP){
				$VAR{thankstemplate} =~ s/%%%$_%%%/$TMP{$_}/ig;
			}
			$VAR{thankstemplate} =~ s/%%%.*?%%%//ig;
			
			print qq~$VAR{thankstemplate}~;
			
			&PrintFoot($FORM{id});	
		}
	}
}
