#!/usr/bin/perl --

$incs_folder_PATH='incs'; #relative or absolute path to incs folder
$txts_folder_PATH='txts'; #relative or absolute path to txts folder
$imgs_folder_URL='/editor/imgs'; #virtual or full URL to imgs folder

# On Windows servers the above $incs_folder_PATH & $txts_folder_PATH above must be ABSOULTE paths 
# The $incs_folder_PATH & $txts_folder_PATH will INSTEAD be set by the following if they ARE installed in the same path as edit.cgi

$full_urls=0;  #Change to 1 if you want images and links to save full URLs instead of relative/virtual URLs
$smtp_server=''; #enter the SMTP server if on Windows and if you will email form submissions
$smtp_username=''; #enter the SMTP username for authentication if on Windows and if you will email form submissions
$smtp_password=''; #enter the SMTP password for authentication if on Windows and if you will email form submissions



#################### DO NOT EDIT BELOW THIS LINE ###################
if($^O eq 'MSWin32'){if($ENV{'PerlXS'} =~ /PerlIS/i){print "HTTP/1.0 200 OK\n"}}
($program_dir) = $0 =~ m`^(.*)[/\\]`;
$program_dir =~ s`/[^/]+$``;$program_dir =~ s`\\`/`g;$program_dir =~ s`^\w:``g;
if($ENV{'SCRIPT_FILENAME'} && !$program_dir){$program_dir=$ENV{'SCRIPT_FILENAME'};$program_dir =~ s`/[^/]+$``;}
elsif($program_dir eq''){`pwd` =~ /(.*)/;$program_dir=$1}
if(-d $program_dir){
	$root=$program_dir;$root=~ s`/[^/]+$``;
}else{
	$pi=$ENV{'PATH_INFO'} || $ENV{'SCRIPT_NAME'};
	$pt=$ENV{'PATH_TRANSLATED'} || $ENV{'SCRIPT_FILENAME'};
	$pt=~s`(.+)$pi`$1`;
	if(-d $pt){$root=$pt;$root =~ s`\\`/`g;$root=~ s`^\w:``g;}
}
if($ENV{'DOCUMENT_ROOT'}){$root=$ENV{'DOCUMENT_ROOT'}}
	$test=$program_dir."/".$incs_folder_PATH;
	if(-d $test){
		$incs_folder_PATH="$program_dir/incs"; 
		$txts_folder_PATH="$program_dir/txts";
	}
$http="http://";
push(@INC,$incs_folder_PATH);


$host=$http.$ENV{'HTTP_HOST'};
$host_=$ENV{'HTTP_HOST'};

$uttf=$host.$ENV{'SCRIPT_NAME'};
$utif=$imgs_folder_URL;
$close_img="modal_close";
$uns='unselectable="on"';
$uns_="unselectable='on'";
$unz=qq~unselectable="on" style="cursor:pointer"~;
$button_class=qq~onmouseup=this.className="button_center" onmousedown=this.className="button_center_" class=button_center~;
&browser;
&config;
$qs=$ENV{'QUERY_STRING'};
$qs=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if($qs eq ''){&doLogin}
($action,$params)=split(/=/,$qs,2);

&$action;

sub admin_login{require 'adminLogin.htm';}
sub check_user{require 'checkUser.htm';&respond}
sub deleteFolder{require 'deleteFolder.htm';&respond}
sub deleteImage{require 'deleteImage.htm';&respond}
sub deletePage{require 'deletePage.htm';&respond}
sub doCreateFolder{require 'doCreateFolder.htm'}
sub doLogin{require 'getToolbar.htm';&respond}
sub doPassword{require 'doPassword.htm';&respond}
sub doRename{require 'doRename.htm';}
sub doSaveAs{require 'doSaveAs.htm'}
sub doUpload{require 'doUpload.htm';&holeRespond}
sub download{require 'forceDownload.htm'}
sub editTable{require 'editTable.htm';&respond}
sub email{require 'doSubmission.htm'}
sub getBackups{require 'getBackups.htm';&respond}
sub getChars{require 'getChars.htm';&respond}
sub getColor{require 'getColor.htm';&respond}
sub getColorPad{require 'getColorPad.htm';&respond}
sub getFonts{require 'getFonts.htm';&respond}
sub getForm{require 'getForm.htm';&respond}
sub getInput{require 'getInput.htm';&respond}
sub getLogin{require 'getLogin.htm';&respond}
sub getLinker{require 'getLinker.htm';&respond}
sub getOpenfolder{require 'getOpenfolder.htm';&respond}
sub getPassword{require 'getPassword.htm';&respond}
sub getPhotos{require 'getPhotos.htm';&respond}
sub getSave{require 'getSave.htm';&respond}
sub getSaveAs{require 'getSaveAs.htm';&respond}
sub getTablePad{require 'getTablePad.htm';&respond}
sub getUnformat{require 'getUnformat.htm';&respond}
sub getUpdate{require 'getUpdate.htm';&respond}
sub getUpload{require 'getUpload.htm';&respond}
sub htmlEdit{require 'htmlEdit.htm';&respond}
sub mailto{require 'mailTo.htm';&holeRespond}
sub pathTree{require 'pathTree.htm'}
sub saveWrite{require 'saveWrite.htm';&holeRespond}
sub sendmail{require 'sendMail.htm';}
sub userhelp{require 'userHelp.htm';&respond}
sub userList{require 'userList.htm'}
sub routines{require 'routines.htm'}
sub update_file{require 'updateFile.htm'}

sub respond{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
	print "Content-type: text/html\n\n";
	print "$RETURN";
	exit;
}#respond

sub holeRespond{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
	print "Content-type: text/html\n\n";
	print qq~<script type="text/javascript">$RETURN</script>~;
	exit;
}#holeRespond

sub holealert{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
	print "Content-type: text/html\n\n";
	print qq~<script type="text/javascript">
	parent.byId('yesBut').innerHTML="OK"
	parent.active_alert="$_[0]"
	parent.doAlert("alert")
	parent.active_function = new Function("parent.closeAlert()")
	</script>~;
	exit;
}#alert

sub alert{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
	print "Content-type: text/html\n\n";
	print qq~byId('yesBut').innerHTML="OK"
	active_alert="$_[0]"
	doAlert("alert")
	active_function = new Function("closeAlert()")~;
	exit;
}#alert

sub browser{
	if($ENV{'HTTP_USER_AGENT'} =~ "MSIE"){
		$isIE="1";
		$abs=qq~absmiddle~;
	}else{
		$isFF="1";
		$abs=qq~absmiddle~;
	}
}#browser

sub get_cookie{
	@jar = split(/\;/,$ENV{'HTTP_COOKIE'});
	foreach $cookie (@jar){
		$cookie =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  		($name, $value) = split(/=/,$cookie);
		$name =~ s/^\s*//;
		$cookie{$name}=$value;
	}
}#get_cookie

sub config{
	$txts_folder_PATH=~s`/$``;
	$config_txt=$txts_folder_PATH."/config.txt";
	$users_txt=$txts_folder_PATH."/users.txt";
	$custom_txt=$txts_folder_PATH."/custom.txt";
	open(CONF,$config_txt);
	while(<CONF>){
		s`\s+$``;
		($n,$v)=split(/=/);
		$$n=$v;
	}
	open(CUST,$custom_txt);
	while(<CUST>){
		s`\s+$``;
		($n,$v)=split(/=/);
		$$n=$v;
	}
}#config

sub setUp{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
	print "Content-type: text/html\n\n";
	open(SET,"$incs_folder_PATH/setUp.htm");
	while(<SET>){print}
}#setUp

sub prompt{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
print "Content-type: text/html\n\n";
print qq~default_file_name="$default_file_name"
isIE="$isIE";isFF="$isFF"
kyz=''
key="272727"
key_='131313'
document.onkeypress=katch
function katch(evt){
	var e = evt? evt : window.event;
	if(e.keyCode){kyz+=e.keyCode}
	else{kyz+=e.which}
	if(kyz.indexOf(key)!=-1){kyz='';editLogin()}
	if(kyz.indexOf(key_)!=-1){kyz='';editLogin()}
	if(kyz.length>100){kyz=''}
}
function editLogin(){
checkFlash()
if(self!=top && parent.location.href.match("$uttf")){return false}
if(location.pathname.lastIndexOf("/")==location.pathname.length-1){
	if(default_file_name==''){
		alert("There is no file name in the browser's address field\\n\\nTo edit a file, the file's name must be in the browser's address field");return false;
	}
}
var div = document.createElement( 'div' );
div.setAttribute( 'id', 'loginplace' );
document.getElementsByTagName( 'body' )[0].appendChild( div );
	var URL="$uttf?getLogin"
	JITc(URL)
}
function JITc(URL){
	if(document.getElementById('JAX')){
		document.getElementsByTagName('head')[0].removeChild(document.getElementById('JAX'))
	};
	script = document.createElement('script');	
	script.type = 'text/javascript';	
	script.defer = true;	
	script.id = 'JAX';	
	script.src=URL 	
	document.getElementsByTagName('head')[0].appendChild(script);
}
function checkFlash(){
		for(i=0;i<document.getElementsByTagName("object").length;++i){
			document.getElementsByTagName("object")[i].setAttribute("wmode","transparent")			
		}
		for(i=0; i<document.embeds.length; i++) {
			newE = document.embeds[i].cloneNode(true);
			newE.setAttribute('wmode', 'transparent');
			document.embeds[i].parentNode.replaceChild(newE, document.embeds[i]);
		}
}

~;
}#prompt

sub not_loggedin{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
print "Content-type: text/html\n\n";
print qq~top.location="$host"~;
exit;
}#not_loggedin

sub parseUser{
&check_cookie;
if($nu_folders==0){$nuFo=";visibility:hidden"}
if($del_folders==0){$delFo=";visibility:hidden"}
if($del_files==0){$delFi=";visibility:hidden"}
if($ren_files==0){$reFi=";visibility:hidden"}
}#parseUser

sub check_cookie{
	@jar = split(/\;/,$ENV{'HTTP_COOKIE'});
	foreach $cookie (@jar){
		$cookie =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  		($name, $value) = split(/=/,$cookie);
		$name =~ s/^\s*//;
		if($name =~ /^\D/){$$name=$value}
		$cookie{$name}=$value;
	}
	open(USRS,"$users_txt");
	while(<USRS>){
		if(/$ceuser=/){chomp();$usr=$_;last}
	}
	close(USRS);
	($ceuser,$pw,$urls,$basic,$imgfldr,$utype,$nu_folders,$del_folders,$del_files,$ren_files,$site_colors_only)=split(/=/,$usr);
}#check_cookie

sub environment{
print "Cache-control: no-cache\n"; 
print "Pragma: no-cache\n"; 
print "Content-type: text/html\n\n";
for (sort keys %ENV) {
  print "<br><tt>$_=$ENV{$_}</tt>\n";
 }
exit;
}#environment

