#!/usr/bin/perl
#------------------------------------------------------------------------------
# Copyright (C) 2001 Thomax Kaulmann
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

use OMA;

use NEWS;
use XSQL;
use Encode;






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


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

sub doexit {
	print "</span></body></html>";
	exit;
}



                           ###            ##               ##
                            ##            ##
## ###   ####   ## ###   #####    ####   #####  ## ###    ###   ## ###    #####
 ### ##     ##   ##  ## ##  ##   ##       ##     ### ##    ##    ##  ##  ##  ##
 ##      #####   ##  ## ##  ##    ####    ##     ##        ##    ##  ##  ##  ##
 ##     ##  ##   ##  ## ##  ##       ##   ## ##  ##        ##    ##  ##   #####
####     ### ##  ##  ##  ### ##  #####     ###  ####      ####   ##  ##      ##
                                                                         #####
sub randstring {
	my $line="";
	my $i;
	for($i=0;$i<=127;$i++) {
		$line .= sprintf("%c",(int(rand()*25)+66));
	}
	return($line);
}




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

sub download {
	my @row, @cont;
	my $st, $item;

	$item=$query->param("item");
	$st=$db->prepare("SELECT * FROM item WHERE sid=$item");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	open(F,"< $TOPSDIR/$row[1]/$row[6]");
	@cont=<F>;
	close(F);
	print $query->header($row[7]);
	print @cont;
	exit;
}



                                                  ###                      ###
                                                   ##                       ##
  ####   ####    ##  ##   ####   ##  ## ## ###     ##     ####   ####    #####
 ##         ##   ##  ##  ##  ##  ##  ##  ##  ##    ##    ##  ##     ##  ##  ##
  ####   #####   ##  ##  ######  ##  ##  ##  ##    ##    ##  ##  #####  ##  ##
     ## ##  ##    ####   ##      ##  ##  #####     ##    ##  ## ##  ##  ##  ##
 #####   ### ##    ##     ####    #####  ##       ####    ####   ### ##  ### ##
                                        ####
# not needed, but nice to have
sub saveupload {
	@tmp = split(/\\/,$query->param('upload'));
	$filename  = $tmp[$#tmp];
	$filestream = $query->param('upload');
	my $type;
	$type = $query->uploadInfo($filestream)->{'Content-Type'};
	while ($bytesread=read($filestream,$buffer,1024)) {
		$all .= $buffer;
	}

	if(-f "$TOPSDIR/$in{'node'}/$filename") {
		print "The uploaded file <b>$filename</b> allready exists.\n";
		doexit;
	}
}





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

sub parseid {
	my $t1, $t2, $id, $base;
	my $st, @row;
	my $query;
	my $item, $thisitem;
	my $type;
	my $link;

	if($_[1] =~ /&item=/ && $_[1] =~ /&type=/)
	{
		($t1,$t2) = split(/\?/,$_[1]);
		($op,$type,$item) = split(/&/,$t2);
		$type =~ s/type=//;
		$item =~ s/item=//;
		$thisitem = $item;
		$item = (OMA::realitem($item))[0];

		$st=$db->prepare("
        	SELECT ". $type ."_conn.". $type ."_page, ". $type ."_conn.location
			FROM item, ". $type ."_conn
			WHERE item.sid=$item
			AND ". $type ."_conn.item_sid=item.sid
		");
		$st->execute();
		($id,$base) = $st->fetchrow();
		$st->finish();
	}
	else {
		if(!(($_[1] =~ /id=/) || ($_[1] =~ /base=/))) {
			return(0,"");
		}
		else {
			($t1,$t2) = split(/\?/,$_[1]);
			($id,$base) = split(/&/,$t2);
			$id =~ s/id=//;
			$base =~ s/base=//;
		}
	}

	$query = "SELECT id FROM $_[0]_page WHERE id=$id AND location='$base'";

	$st=$db->prepare($query);
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();

	if($row[0] != $id) {
		return(0,"");
	}

	return($id,$base,$thisitem);
}



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


sub showtree {
  my $id=shift;
  my @row, %dir;
  my $st;
  my $leer;

  $st=$db->prepare("SELECT * FROM node WHERE prev_sid=$id ORDER BY prev_sid,node");
  $st->execute();

  while(@row=$st->fetchrow()) {
    $leer="";
    for($i=0;$i<=depth($row[0],0)-1;$i++) {
      $leer .= "&#160&#160&#160";
    }
    $img = "<img width=\"14\" height=\"15\" border=\"0\" src=\"/icons/folder.png\"/>";
    $img = "<img width=\"14\" height=\"15\" border=\"0\" src=\"/icons/folder.open.png\"/>" if($isopen{$row[0]});

    if($isok > 0) {
      print "$leer<a href=\"$OMA::OMABIN/gen?op=ilink&node=$row[0]\">$img $row[1]</a> &nobr;&nobr;&nobr;&nobr;<a target=\"dwnwork\" href=\"$OMA::OMABIN/gen?op=additem&node=$row[0]\">root <img border=\"0\" width=\"12\" src=\"http://$OMA::OMAHOST/img/edit.png\"/></a><br/>\n";
    } else {
      print "$leer<a href=\"$OMA::OMABIN/gen?op=ilink&node=$row[0]\">$img $row[1]</a><br/>\n";
    }

		print $leer;

		printf("<a href=\"$OMA::OMABIN/gen?op=ilink&fc=9&node=$row[0]&leer=$leer\">#</a> ");
		for($i=96;$i<=96+26;$i++) {
			printf("<a href=\"$OMA::OMABIN/gen?op=ilink&fc=%c&node=$row[0]&leer=$leer\">%c</a>",$i,$i);
			print " " if($i>96 && $i<96+26);
		}
		print "<br/>";
		showtree($row[0],$t);
  }
  $st->finish();
}




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


sub leaf {
	my $node=shift;
	my @row;
	my $st;

    $st=$db->prepare("SELECT * FROM node WHERE prev_sid=$node");
    $st->execute();
    @row=$st->fetchrow();
    $st->finish();
		if($row[0]>0) {
			return(0);
		} else {
		return(1)
	}
}



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

sub getmap {
	my $id=shift;
	my $map=shift;
	my @row;
	my $st;

	$st=$db->prepare("SELECT * FROM treemap");
	$st->execute();

	while(@row=$st->fetchrow()) {
		$row[1] =~ s/\/\//\//g;
		$globmap{$row[0]} = $row[1];
		$count{$row[0]} = $row[2];
	}
	$st->finish();
}


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

sub nodeempty {
	my $node=shift;
	my $st, @row;

	$st=$db->prepare("SELECT * FROM item WHERE node_sid=$node");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	if($row[1] == $node) {
		return(0);
	}

	$st=$db->prepare("SELECT * FROM node WHERE prev_sid=$node");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	if($row[2] == $node) {
		return(0);
	}
	return(1);
}




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

sub depth {
	my $id=shift;
	my $count=shift;
	my @row;
	my $st;

	$st=$db->prepare("SELECT * FROM node WHERE sid=$id");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	if($row[2]>0) {
		$count++;
		depth($row[2],$count);
	}
	else {
		return($count);
	}
}


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

sub startchars {
	my $node=shift;
	my $char=shift;
	my $st;
	my @row;

	if($USEMYSQL) {
		$st=$db->prepare("SELECT item.sid FROM node,item WHERE node.sid=$node AND node.sid=item.node_sid AND item.description like '$char%'");
	} else {
		$st=$db->prepare("SELECT item.sid FROM node,item WHERE node.sid=$node AND node.sid=item.node_sid AND item.description ilike '$char%'");
	}
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	if($row[0]>0) {
		return(1);
	}
	return(0);
}




                                           ##

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

sub overviewx {
	my $id=shift;
	my @row;
	my $st;
	my $leer;
	my $t;

	$st=$db->prepare("SELECT * FROM node WHERE prev_sid=$id ORDER BY prev_sid,node");
	$st->execute();

	while(@row=$st->fetchrow()) {
		$leer="";
		for($i=0;$i<=depth($row[0],0)-1;$i++) {
			$leer .= "&#160&#160";
		}
		$img = "<img border=0 src=/img/arrow_right.png/>";
		$img = "<img border=0 src=/img/arrow_down.png/>" if($isopen{$row[0]});

		$t = "";
		$t = "&c=1" if($isopen{$row[0]});
		if($isok > 0) {
			print "$leer<nobr/><b><a name=\"$row[0]\" href=\"$OMA::OMABIN/gen?op=ilink&node=$row[0]$t#$row[0]\">$img $row[1]</a></b> &#160&#160&#160&#160<a target=\"dwnwork\" href=\"$OMA::OMABIN/gen?op=additem&node=$row[0]\">";
			print "<img border=\"0\" width=\"12\" src=\"http://$OMA::OMAHOST/img/edit.png\"/></a>\n";
		} else {
			print "$leer<b><a name=\"$row[0]\" href=\"$OMA::OMABIN/gen?&op=ilink&node=$row[0]$t#$row[0]\">$img $row[1]</a></b>\n";
		}

		if($isopen{$row[0]}) {
			if($count{$row[0]} > 99) {
				print "<nobr>";
				print "<br/>&#160&#160&#160$leer<font size=\"-1\"><b>";
				printf("<a href=\"$OMA::OMABIN/gen?op=ilink&fc=9&node=$row[0]&leer=$leer\">#</a> ");
				for($i=97;$i<=96+26;$i++) {
					if(startchars($row[0],chr($i))) {
						printf("<a href=\"$OMA::OMABIN/gen?op=ilink&fc=%c&node=$row[0]$t#$row[0]\">%c</a>",$i,$i);
						print " " if($i>96 && $i<96+26);
					}
				}
				print "</b></font>";
				print "</nobr>";
			}

			if((($in{'fc'}) && ($row[0] != $in{'node'}) && ($count{$row[0]} < 99))) {
				$t=$in{'fc'};
				$in{'fc'} = "%";
			}

			if(
				(($row[0] != $in{'node'}) && ($count{$row[0]} < 99))
			||	(($in{'fc'} && ($row[0] == $in{'node'})))
			||	(($row[0] == $in{'node'}) && ($count{$row[0]} < 99) && !$in{'fc'}))
			{
				showitemlinks ("&#160&#160&#160$leer",$row[0]);
			}

			if((($in{'fc'}) && ($row[0] != $in{'node'}) && ($count{$row[0]} < 99))) {
				$in{'fc'} = $t;
			}

		}

		print "<br/>";

		if($isopen{$row[0]}) {
			overview($row[0],$t);
		}

	}
	$st->finish();
}


sub overview {
	my $id=shift;
	my @row;
	my $st;
	my $leer;
	my $t;

	$st=$db->prepare("SELECT * FROM node WHERE prev_sid=$id ORDER BY prev_sid,node");
	$st->execute();


	while(@row=$st->fetchrow()) {
		$leer=$leer2="";
		for($i=0;$i<=depth($row[0],0)-1;$i++) {
			#$leer .= "&#160&#160";
			$leer .= "<ul>";
			$leer2 .= "</ul>";
		}
		$img = "<img border=\"0\" src=\"/img/arrow_right.png\"/>";
		$img = "<img border=\"0\" src=\"/img/arrow_down.png\"/>" if($isopen{$row[0]});

		$t = "";
		$t = "&c=1" if($isopen{$row[0]});
		if($isok > 0) {
			print "<nobr>$leer<b><a name=\"$row[0]\" href=\"$OMA::OMABIN/gen?op=ilink&node=$row[0]$t#$row[0]\">$img $row[1]</a></b><a target=\"dwnwork\" href=\"$OMA::OMABIN/gen?op=additem&node=$row[0]\">";
			print "<img border=\"0\" width=\"12\" src=\"http://$OMA::OMAHOST/img/edit.png\"/></a>\n";
		} else {
			print "$leer<b><a name=\"$row[0]\" href=\"$OMA::OMABIN/gen?&op=ilink&node=$row[0]$t#$row[0]\">$img $row[1]</a></b>\n";
		}

		print "$leer2</nobr>";
		if($isopen{$row[0]}) {
			if($count{$row[0]} > 99) {
				print $leer;
				print "<b><nobr>";
				printf("<a href=\"$OMA::OMABIN/gen?op=ilink&fc=9&node=$row[0]\">#</a> ");
				for($i=97;$i<=96+26;$i++) {
					if(startchars($row[0],chr($i))) {
						printf("<a href=\"$OMA::OMABIN/gen?op=ilink&fc=%c&node=$row[0]$t#$row[0]\">%c</a>",$i,$i);
						print " " if($i>96 && $i<96+26);
					}
				}
				print "</nobr></b>";
				print $leer2;
			}

			if((($in{'fc'}) && ($row[0] != $in{'node'}) && ($count{$row[0]} < 99))) {
				$t=$in{'fc'};
				$in{'fc'} = "%";
			}

			if(
				(($row[0] != $in{'node'}) && ($count{$row[0]} < 99))
			||	(($in{'fc'} && ($row[0] == $in{'node'})))
			||	(($row[0] == $in{'node'}) && ($count{$row[0]} < 99) && !$in{'fc'}))
			{
				showitemlinks ("<ul>$leer","</ul>$leer2",$row[0]);
			}

			if((($in{'fc'}) && ($row[0] != $in{'node'}) && ($count{$row[0]} < 99))) {
				$in{'fc'} = $t;
			}

		}

#		print "<br/>";

		if($isopen{$row[0]}) {
			overview($row[0],$t);
		}

	}
	$st->finish();
}


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

sub savenode {
	my @row;
	my $newid;

	if($in{'nname'} =~ /\//) {
		print "Sorry, directory names cannot contain a \"<b>/</b>\".\n";
		doexit;
	}

	$newid = OMA::nextsid("node_sid");
	XSQL::transopen();
	XSQL::transact("INSERT INTO node VALUES ($newid,'$in{'nname'}',$in{'prevnode'})");
	XSQL::transclose();

	@row=OMA::loadnode($in{'prevnode'});
	print "Directory <b>$in{'nname'}</b><br/>saved ". OMA::getpath($row[1]) ."\n";
	undef(%globmap);
	OMA::savemap(1);
	doexit;
}



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

sub delnode {
	my $path;
	$path=OMA::getpath($in{'node'});
	if(nodeempty($in{'node'})) {
		XSQL::transopen();
		XSQL::transact("DELETE FROM node WHERE sid=$in{'node'}");
		XSQL::transclose();

		print "Directory <b>$path</b> is deleted.\n";
		OMA::savemap();
		undef(%globmap);
		getmap();
	} else {
		print "Directory <b>$path</b> node is not empty.\n";
	}
	doexit;
}


        ###                                                        ###
         ##                                                         ##
  ####   ## ##   ####   ## ###    #####   ####  ## ###    ####   #####    ####
 ##  ##  ### ##     ##   ##  ##  ##  ##  ##  ##  ##  ##  ##  ## ##  ##   ##  ##
 ##      ##  ##  #####   ##  ##  ##  ##  ######  ##  ##  ##  ## ##  ##   ######
 ##  ##  ##  ## ##  ##   ##  ##   #####  ##      ##  ##  ##  ## ##  ##   ##
  ####  ###  ##  ### ##  ##  ##      ##   ####   ##  ##   ####   ### ##   ####
                                 #####
sub changenode {
	my $path;
	my $null;
	
	XSQL::transopen();
	XSQL::transact("UPDATE node SET node='$in{'nname'}' WHERE sid=$in{'node'}");
	XSQL::transclose();

	# move dir as well...
	$path = OMA::getpath($in{'node'});
	$ppath = $path;
	$ppath =~ s/\/(.)*$//;
	if(-d "$OMA::BASEPATH$path") {
		rename("$OMA::BASEPATH$path", "$OMA::BASEPATH$ppath/$in{'nname'}");
	}

	undef(%globmap);
	OMA::savemap(1);

	$null = `$OMA::PATHPREFIX$OMA::OMABIN/batch $in{'node'}`;

	print "Changed node name.";
	
	doexit;
}



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

sub movenode {
	my $st;
	my $path;
	my $npath;
	my $dpath;
	my $st;
	my @row;

	$st=$db->prepare("SELECT node FROM node WHERE sid=$in{'node'}");
	$st->execute();
	@row = $st->fetchrow();
	$st->finish();

    $path = OMA::getpath($in{'node'});
    $dpath = OMA::getpath($in{'destnode'});

	if($in{'destnode'} != $in{'node'}) {
		XSQL::transopen();
		XSQL::transact("UPDATE node SET prev_sid=$in{'destnode'} WHERE sid=$in{'node'}");
		XSQL::transclose();
	}
	else {
		print "Can't move in itself.";
		doexit;
	}

	undef(%globmap);
	OMA::savemap(1);

	# move dir as well...
    if(-d "$OMA::BASEPATH$path") {
		$path =~ s/\ /\\ /g;
		$dpath =~ s/\ /\\ /g;
        system("mv $OMA::BASEPATH$path $OMA::BASEPATH$dpath");
    }
	$null = `$OMA::PATHPREFIX$OMA::OMABIN/batch $in{'node'}`;

	print "node has been moved.";

	doexit;
}


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

sub additem {
	my @row;
	@row=OMA::loadnode($in{'node'});
	print "<h2>Documentary tree administration</h2><table>";

	if($row[1] eq "Homepage") {
		print "<a href=\"$OMA::OMABIN/genhome\">Publish homepage</a>";
	}
	else {
		print "<a href=\"$OMA::OMABIN/batch?node=$row[0]\">Publish directory</a> | ";
	}

	if(OMA::haveboard($row[0])==1) {
		print " <a href=\"$OMA::OMABIN/gen?op=delboard&node=$row[0]\">Delete messageboard</a>";
	} else {
		print " <a href=\"$OMA::OMABIN/gen?op=newboard&node=$row[0]\">Add messageboard</a>";
	}

	print "
		<tr><td colspan=\"2\"><b>Create meta document:</b></td></tr>
		<form method=\"post\" action=\"$OMA::OMABIN/gen_link\">
		<input type=\"hidden\" name=\"op\" value=\"saveitem\">
		<input type=\"hidden\" name=\"node\" value=\"$row[0]\">
		<tr><td>Title:</td><td><input type=\"text\" size=\"30\" name=\"description\"></td></tr>
		<tr><td></td><td><input type=\"submit\" name=\"OK\" value=\"OK\"></td></tr>
		</form>
	" if($in{'node'} > 1);

	print "
		<tr><td colspan=\"2\"><hr></td></tr>
		<tr><td colspan=\"2\"><b>Change directory name:</b></td></tr>
		<form method=\"post\">
		<input type=\"hidden\" name=\"op\" value=\"changenode\">
		<input type=\"hidden\" name=\"node\" value=\"$row[0]\"><br/>
		<tr><td>New directory name:</td><td><input type=\"text\" name=\"nname\" value=\"$row[1]\"></td></tr>
		<tr><td></td><td><input type=\"submit\" name=\"OK\" value=\"OK\"></td></tr>
		</form>
	" if($in{'node'} > 1);

	print "
		<tr><td colspan=\"2\"><hr></td></tr>
		<tr><td colspan=\"2\"><b>Create new directory:</b></td></tr>
		<form method=\"post\">
		<input type=\"hidden\" name=\"op\" value=\"savenode\">
		<input type=\"hidden\" name=\"prevnode\" value=\"$row[0]\"><br/>
		<tr><td>This directory:</td><td>$row[1]</td></tr>
		<tr><td>New directory name :</td><td><input type=\"text\" name=\"nname\"></td></tr>
		<tr><td></td><td><input type=\"submit\" name=\"OK\" value=\"OK\"></td></tr>
		</form>
	";

	if($in{node} > 1) {
		print "
			<form method=\"post\">
			<input type=\"hidden\" name=\"op\" value=\"movenode\">
			<input type=\"hidden\" name=\"node\" value=\"$in{'node'}\">
			<tr><td colspan=\"2\"><hr/></td></tr>
			<tr><td colspan=\"2\"><b>Move directory</b></b></td></tr>
			<td>Select the destination directory</td>
			<td><select name=\"destnode\"><option value=\"1\">/
";

		$st=$db->prepare("SELECT * FROM treemap ORDER BY node");
		$st->execute();
		while(@row=$st->fetchrow()) {
			print "<option value=\"$row[0]\">$row[1]";
		}
		$st->finish();

		print "</select></td></tr>
			<tr><td></td><td><input type=\"submit\" name=\"OK\" value=\"OK\"></td></tr>
			</form>
		";
	}

	print "
		<form method=\"post\">
		<tr><td colspan=\"2\"><hr></td></tr>
		<tr><td colspan=\"2\"><b>Delete current directory:</b>
		<p>
		<input type=\"hidden\" name=\"op\" value=\"delnode\">
		<input type=\"hidden\" name=\"node\" value=\"$in{'node'}\">
		Are you sure to delete this directory? <input type=\"submit\" name=\"OK\" value=\"OK\">
		</td></tr>
		</form>
	" if($in{'node'} > 1);

	if($ENV{'REMOTE_USER'} eq "admin") {
		print "
		<tr><td colspan=\"2\"><hr></td></tr>
		<tr><td colspan=\"2\"><b>Template edit:</b>
		<p>
<!-- loopverdacht -->
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=meta\">Meta template</a>]
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=ova\">Film template</a>]
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=opa\">Image template</a>]<br/>
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=ota\">Text template</a>]
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=reboot\">reboot template</a>]
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=dir\">Directory template</a>]<br/>
		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=1&type=search\">Search template</a>]
    [<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=homepage\">Homepage template</a>]
    [<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=discussion\">Discussion</a>]
		</td></tr>
		</form>
		";
#		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=ora\">Audio template</a>]
#		[<a href=\"$OMA::OMABIN/gen?op=edittempl&node=$in{'node'}&type=newasset\">newasset template</a>]
	}


	print "
		</table>

	";
	doexit;
}


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

sub saveitem {
	my @row;
	my $all, $filename, $filestream, @tmp, $st;
	my $buffer;
	my $newid = OMA::nextsid("item_sid");

	if(!$in{'description'}) {
		print "You forgot to enter a title. It's required.\n";
		doexit;
	}

	XSQL::transopen();
	XSQL::transact("INSERT INTO item VALUES ( $newid, $in{'node'}, '$in{'description'}', 'meta', 0, 1 ) ");
	XSQL::transclose();
	if(! -d "$TOPSDIR/$in{'node'}") {
		system("mkdir -p $TOPSDIR/$in{'node'}");
	}
	print "New meta document <b>$in{'description'}</b><br/>saved in directory: ". OMA::getpath($in{'node'}) ."<br/>\n";
	OMA::savemap(1);
	doexit;
}




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

sub finditem {
	my $id=shift;
 	my @row;
	my $st;

	$st=$db->prepare("SELECT * FROM node WHERE sid=$id");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	if($row[2]>0) {
		$isopen{$row[0]} = 1;
		$clicked .= "$row[0]/";
		finditem($row[2]);
	}
	else {
		overview(1);
	}
}


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

sub delitem {
	my @row, @row2;
	my $st, $st2;
	my $path;

	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();

	XSQL::transopen();
	XSQL::transact("DELETE FROM ova_conn WHERE item_sid=$in{'item'}");
	XSQL::transact("DELETE FROM ora_conn WHERE item_sid=$in{'item'}");
	XSQL::transact("DELETE FROM ota_conn WHERE item_sid=$in{'item'}");
	XSQL::transact("DELETE FROM opa_conn WHERE item_sid=$in{'item'}");
	XSQL::transact("DELETE FROM newasset_conn WHERE item_sid=$in{'item'}");
	XSQL::transact("DELETE FROM reboot_conn WHERE item_sid=$in{'item'}");
	XSQL::transclose();

	if($row[5] == 1) {
			$path = OMA::getpath($row[1]);
			if(-f "$OMA::BASEPATH$path/$row[0].html") {
				unlink("$OMA::BASEPATH$path/$row[0].html");
			}
	}
	
	XSQL::transopen();
	$st=$db->prepare("SELECT * FROM item WHERE link_item=$in{'item'}");
	$st->execute();
	while(@row2 = $st->fetchrow()) {
		$path = OMA::getpath($row2[1]);
		if(-f "$OMA::BASEPATH$path/$row2[0].html") {
			unlink("$OMA::BASEPATH$path/$row2[0].html");
		}
		XSQL::transact("DELETE FROM item WHERE sid=$row2[0]");
		OMA::index_node($row2[1]);
	}
	$st->finish();
	XSQL::transclose();

	XSQL::transopen();
	XSQL::transact("DELETE FROM item WHERE sid=$in{'item'}");
	XSQL::transclose();

	print "Item and its links deleted<br/>\n";
	OMA::index_node($row[1]);

	OMA::savemap(1);

	doexit;
}



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

sub mediatitle {
	my $what = shift;
	my $id = shift;
	my $base = shift;
	my @row;
	my $st;
	my $query;

	$query = "
		SELECT	". $what ."_page.dc__title
		FROM	". $what ."_page
		WHERE	". $what ."_page.id=$id
		AND		". $what ."_page.location='$base'";

	$st=$db->prepare($query);
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	return($row[0]);
}



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

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

sub showitemmedia {
	my $st;
	my @row;
	my $realsid;
	my $type;
	my $k;
	my %items;

	undef(%items);

	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
	$realsid=$row[0];
	$type=$row[3];

	if($row[4]>0) {
		$st=$db->prepare("SELECT * FROM item WHERE sid=$row[4]");
		$st->execute();
		@row=$st->fetchrow();
		$st->finish();
		$realsid=$row[0];
	}

	foreach $k ("ova", "ota", "opa", "reboot") {
		$st=$db->prepare("SELECT * FROM ". $k ."_conn WHERE item_sid=$realsid");
		$st->execute();
		while(@row=$st->fetchrow()) {
			if($k ne "ota") {
				$items{$k} .= OMA::medialist($k,"",97,$row[1],$row[2],$realsid);
			} else {
				$items{$k} .= OMA::medialist($k,"",197,$row[1],$row[2],$realsid);
			}
		}
		$st->finish();
	}
		
	if($type eq "meta") {

#loopverdacht
		print "<table cellspan=\"20\" cellpadding=\"20\"><tr><td valign=\"top\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/film.png\"/> [Film]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'ova'}</div></td></tr></table></td>";

		print "<td valign=\"top\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/reboot.png\"/> [reboot]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'reboot'}</div></td></tr></table></td></tr>";

		print "<tr><td valign=\"top\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/image.png\"/> [Image]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'opa'}</div></td></tr></table></td>";

		print "<td valign=\"top\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/text.png\"/> [Text]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'ota'}</div></td></tr></table></td></tr></table>";

#		print "<td valign=\"top\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/audio.png\"/> [Audio]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'ora'}</div></td></tr></table></td></tr>";
#		print "<td valign=\"top\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/newasset.png\"/> [newasset]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$newasset_items</div></td></tr></table></td></tr>";
	}

	if($type eq "ova") {
		print "<p><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/film.png\"/> [Film]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'ova'}</div></td></tr></table>";
	}

	if($type eq "reboot") {
		print "<p><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/reboot.png\"/> [reboot]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'reboot'}</div></td></tr></table>";
	}

	if($type eq "opa") {
		print "<p><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/image.png\"/> [Image]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'opa'}</div></td></tr></table>";
	}

	if($type eq "ota") {
		print "<p><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/text.png\"/> [Text]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'ota'}</div></td></tr></table>";
	}

#	if($type eq "ora") {
#		print "<p><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/audio.png\"/> [Audio]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'ora'}</div></td></tr></table>";
#	}
#
#	if($type eq "newasset") {
#		print "<p><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"180\"><tr><th><img align=\"top\" src=\"/img/newasset.png\"/> [newasset]</th></tr><tr><td><font size=\"-1\"><div align=\"justify\">$items{'newasset'}</div></td></tr></table>";
#	}

}




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

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


sub showitemlinks {
	my $leer=shift;
	my $leer2=shift;
	my $node=shift;
	my @row;
	my $st;

	if($in{'fc'} ne "9") {
		if($USEMYSQL>0) {
			$st=$db->prepare("SELECT * FROM item WHERE node_sid=$node AND description like '$in{'fc'}%' ORDER BY type,description");
		} else {
			$st=$db->prepare("SELECT * FROM item WHERE node_sid=$node AND description ilike '$in{'fc'}%' ORDER BY type,description");
		}
	} else {
		$st=$db->prepare("SELECT * FROM item WHERE node_sid=$node AND description <= '9%' ORDER BY type,description");
	}
	$st->execute();

	while(@row=$st->fetchrow()) {
#		print "$leer<nobr><a target=\"$row[3]cook\" href=\"http://$row[3]$OMA::OMADOMAIN/$row[3]-perl/$row[3]-cook?op=add&item=$row[0]\"><img border=\"0\" src=\"/img/arrow_up.png\"/></a><img width=\"14\" src=\"/img/$OMA::MEDIA_TYPE{$row[3]}.png\"/> <a target=\"dwnwork\" href=\"$OMA::OMABIN/gen?op=showitem&type=$row[3]&item=$row[0]\">$row[2]</a></nobr>$leer2\n";
		print "$leer<nobr><a target=\"$row[3]cook\" href=\"http://$OMA::OMAHOST/$row[3]-perl/$row[3]-cook?op=add&item=$row[0]\"><img border=\"0\" src=\"/img/arrow_up.png\"/></a><a target=\"dwnwork\" href=\"$OMA::OMABIN/gen?op=showitem&type=$row[3]&item=$row[0]\"><img width=\"14\" border=\"0\" src=\"/img/$OMA::MEDIA_TYPE{$row[3]}.png\"/> $row[2]</a></nobr>$leer2\n";
	}
	$st->finish();
}



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

sub showitem {
	my @row2;
	my $st2;
	my @row;
	my $st;
	my $realsid;

	print "<h2>Content sheet</h2>";
	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	@rowname = @{$st->{'NAME'}};
	$st->finish();

	$realsid=$in{'item'};

	if($row[4]>0) {
		$realsid=$row[4];
		$st2=$db->prepare("SELECT * FROM item WHERE sid=$realsid");
		$st2->execute();
		@row2=$st2->fetchrow();
		print "Origin in: $globmap{$row2[1]}<br/>";
	}

	print "Current context: <b>$globmap{$row[1]}</b><br/>";

	$st2=$db->prepare("
			SELECT *
			FROM item
			WHERE link_item=$realsid
			AND link_item != 0
			AND sid != $in{'item'}
	");
	$st2->execute();
	while(@row2=$st2->fetchrow()) {
		print "Also in: $globmap{$row2[1]}<br/>";
	}
	$st2->finish();
	print "<br/>";

	if($isok>0) {
		if($row[3] eq "meta" || $row[4] > 0) {
			print "<a href=\"$OMA::OMABIN/gen?op=delitem&item=$in{'item'}\">Delete</a> | ";
		}
		my $pub = "Publish";
		$pub = "Unpublish" if($row[5] == 1);
		print "<a href=\"$OMA::OMABIN/batch?node=$row[1]&item=$in{'item'}\">$pub</a> | ";

		if($row[4]==0) {
			print "<a href=\"$OMA::OMABIN/gen?op=edititem&item=$in{'item'}\">Assign</a> | ";
		}
		if($row[3] eq "meta") {
			print "<a href=\"$OMA::OMABIN/parse?op=showitem&item=$in{'item'}\"> User view</a>";
		} else {
			my $host = eval "\$OMA::". uc($row[3]) ."HOST";
			print "<a href=\"http://$host/$row[3]-perl/$row[3]-parse?op=showitem&item=$in{'item'}\"> User view</a>";
		}	
		print "<br/>";
	}
	showitemmedia($in{'item'});

	doexit;
}

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

sub edititem {
	my @row;
	my $st;

	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	@rowname = @{$st->{'NAME'}};
	$st->finish();

	if($row[3] eq "meta") {
		connectform($in{'item'});
	}
	$row[2] =~ s/"/&quot;/g;
	print "
		<b>Location form</b><br/>
		<form method=\"post\">
		<table>
		<input type=\"hidden\" name=\"op\" value=\"updateitem\">
		<input type=\"hidden\" name=\"sid\" value=\"$in{'item'}\">
		<tr><td>Title:</td>
		<td><input type=\"text\" size=\"30\" value=\"$row[2]\" name=\"description\"></td></tr>
		<tr><td><input type=\"radio\" name=\"what\" value=\"move\">move or<br/><input type=\"radio\" name=\"what\" value=\"link\" checked>link or<br/><input type=\"radio\" name=\"what\" value=\"copy\">copy to</td><td><select size=\"15\" name=\"destination\" multiple>";

		$st=$db->prepare("SELECT * FROM treemap ORDER BY node");
		$st->execute();
		while(@row=$st->fetchrow()) {
			print "<option value=$row[0]>$row[1]";
		}
		$st->finish();

		print "</select></td></tr>
		<tr><td></td><td><input type=\"submit\" name=\"OK\" value=\"OK\"></td></tr>
		</table>
		<input type=\"hidden\" name=\"item\" value=\"$in{'item'}\">
		</form>
	";
	doexit;
}


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

sub updateitem {
	my $description;
	my $st;
	my $newid;
	my @row;
	my @inserts;
	my $i, $d;
	my @newdest;

	$description = $in{'description'};
	$description =~ s/'/\\'/g;
	$description =~ s/"/\\"/g;

	XSQL::transopen();
	XSQL::transact("UPDATE item SET description='$description' WHERE sid=$in{'sid'}");
	XSQL::transclose();

#	if($in{'destination'} ne "none") {
	if($in{'destination'}) {
		
		$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'sid'}");
		$st->execute();
		@orow=$st->fetchrow();
		$st->finish();

		if($in{'what'} eq "move") {
			@newdest = split(/\0/,$in{'destination'});
			if($#newdest > 0) {
				print "<font color=\"#ff0000\">cant move to multiple destinations!</font><br/>\n";
			} else {
				XSQL::transopen();
				XSQL::transact("UPDATE item SET node_sid=$in{'destination'} WHERE sid=$in{'sid'}");
				XSQL::transclose();
				print "Item moved.<br/>\n";
			}
		}

		if($in{'what'} eq "link") {
			@newdest = split(/\0/,$in{'destination'});
			for($d=0; $d <= $#newdest; $d++) {
				$description =~ s/'/\\'/g;
				$description =~ s/"/\\"/g;

				$newid = OMA::nextsid("item_sid");
				XSQL::transopen();
				XSQL::transact("INSERT INTO item VALUES ($newid,$newdest[$d],'$description','$orow[3]',$in{'sid'},1)");
				XSQL::transclose();
			}
			print "Item linked.<br/>\n";
		}

		if($in{'what'} eq "copy") {
			@newdest = split(/\0/,$in{'destination'});
			for($d=0; $d <= $#newdest; $d++) {
				$description =~ s/'/\\'/g;
				$description =~ s/"/\\"/g;

				$newid = OMA::nextsid("item_sid");
				XSQL::transopen();
				XSQL::transact("INSERT INTO item VALUES ($newid,$newdest[$d],'$description','$orow[3]',0,1)");
				XSQL::transclose();

				$st=$db->prepare("SELECT * FROM ora_conn WHERE item_sid=$in{'sid'}");
				$st->execute();
				$i=0;
				while(@row=$st->fetchrow()) {
					$inserts[$i++] = "INSERT INTO ora_conn VALUES ($newid,$row[1],\'$row[2]\',$row[3],$row[4])";
				}
				$st->finish();

				$st=$db->prepare("SELECT * FROM ova_conn WHERE item_sid=$in{'sid'}");
				$st->execute();
				while(@row=$st->fetchrow()) {
					$inserts[$i++] = "INSERT INTO ova_conn VALUES ($newid,$row[1],\'$row[2]\',$row[3],$row[4])";
				}
				$st->finish();

				$st=$db->prepare("SELECT * FROM ota_conn WHERE item_sid=$in{'sid'}");
				$st->execute();
				while(@row=$st->fetchrow()) {
					$inserts[$i++] = "INSERT INTO ota_conn VALUES ($newid,$row[1],\'$row[2]\',$row[3],$row[4])";
				}
				$st->finish();

				$st=$db->prepare("SELECT * FROM opa_conn WHERE item_sid=$in{'sid'}");
				$st->execute();
				while(@row=$st->fetchrow()) {
					$inserts[$i++] = "INSERT INTO opa_conn VALUES ($newid,$row[1],\'$row[2]\',$row[3],$row[4])";
				}
				$st->finish();

				$st=$db->prepare("SELECT * FROM newasset_conn WHERE item_sid=$in{'sid'}");
				$st->execute();
				$i=0;
				while(@row=$st->fetchrow()) {
					$inserts[$i++] = "INSERT INTO newasset_conn VALUES ($newid,$row[1],\'$row[2]\',$row[3],$row[4])";
				}
				$st->finish();

				$st=$db->prepare("SELECT * FROM reboot_conn WHERE item_sid=$in{'sid'}");
				$st->execute();
				$i=0;
				while(@row=$st->fetchrow()) {
					$inserts[$i++] = "INSERT INTO reboot_conn VALUES ($newid,$row[1],\'$row[2]\',$row[3],$row[4])";
				}



				for($i=0;$i<=$#inserts;$i++) {
					XSQL::transopen();
					XSQL::transact($inserts[$i]);
					XSQL::transclose();
				}
			}
			print "Item copied.<br/>\n";
		}
	}
#	connectform($in{'sid'});
#	edititem($in{'sid'});
	doexit;
}


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

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

sub connectform {
	my $item=shift;
	my $page;
	my $st;
	my @row;

	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();

	print "<font type=\"helvetica,arial\">";
	print "<font size=\"+1\">Administre item: <b>$row[2]</b></font><br/>";
	print "Current path: <b>".OMA::getpath($row[1],"")."</b><p>";

	print "<form method=\"post\"><b>Connection form</b>";

	for($i=0;$i<=20;$i++) {
		if($i == 1) {
			$page .= "<option selected>$i";
		} else {
			$page .= "<option>$i";
		}
	}
	print "
<input type=\"hidden\" name=\"op\" value=\"makeconnect\">
<input type=\"hidden\" name=\"item\" value=\"$item\">
<pre><img align=\"top\" src=\"/img/film.png\"/> [Film]   : <input type=\"text\" name=\"ova_page\"> <select name=v\"page\">$page</select>
<img align=\"top\" src=\"/img/reboot.png\"/> [reboot] : <input type=\"text\" name=\"reboot_page\"> <select name=\"rebootpage\">$page</select>
<img align=\"top\" src=\"/img/image.png\"/> [Image]  : <input type=\"text\" name=\"opa_page\"> <select name=\"ppage\">$page</select>
<img align=\"top\" src=\"/img/text.png\"/> [Text]   : <input type=\"text\" name=\"ota_page\"> <select name=\"tpage\">$page</select>
              <input type=\"submit\" name=\"OK\" value=\"OK\"></pre>
</form>
";

#<img align=\"top\" src=\"/img/audio.png\"/> [Audio] : <input type=\"text\" name=\"ora_page\"> <select name=\"apage\">$page</select>
#<img align=\"top\" src=\"/img/newasset.png\"/> [newasset]  : <input type=\"text\" name=\"newasset_page\"> <select name=\"newassetpage\">$page</select>

	print "Connected Media links. To <b>delete</b> a link, click it.<ul>";

#loopverdacht
	$st=$db->prepare("SELECT * FROM ova_conn WHERE item_sid=$item");
	$st->execute();
	while(@row=$st->fetchrow()) {
		print "<img align=\"top\" src=\"/img/film.png\"/> [film] <a href=\"$OMA::OMABIN/gen?op=disconnect&item=$row[0]&ova_page=$row[1]\">". mediatitle("ova",$row[1],$row[2]). "</a> page $row[3]<br/>";
	}
	$st->finish();
	print "<br/>";

	$st=$db->prepare("SELECT * FROM reboot_conn WHERE item_sid=$item");
	$st->execute();
	while(@row=$st->fetchrow()) {
		print "<img align=\"top\" src=\"/img/reboot.png\"/> [reboot] <a href=\"$OMA::OMABIN/gen?op=disconnect&item=$row[0]&reboot_page=$row[1]\">". mediatitle("reboot",$row[1],$row[2]). "</a> page $row[3]<br/>";
	}
	$st->finish();
	print "<br/>";


	$st=$db->prepare("SELECT * FROM ota_conn WHERE item_sid=$item");
	$st->execute();
	while(@row=$st->fetchrow()) {
		print "<img align=\"top\" src=\"/img/text.png\"/> [text] <a href=\"$OMA::OMABIN/gen?op=disconnect&item=$item&ota_page=$row[1]\">". mediatitle("ota",$row[1],$row[2]) ."</a> page $row[3]<br/>";
#		print "<a href=\"$OMA::OMABIN/gen?op=disconnect&item=$item&ota_page=$row[1]\">text: $row[0] - $row[1]</a><br/>";
	}
	$st->finish();
	print "<br/>";

	$st=$db->prepare("SELECT * FROM opa_conn WHERE item_sid=$item");
	$st->execute();
	while(@row=$st->fetchrow()) {
			print "<img align=\"top\" src=\"/img/image.png\"/> [image] <a href=$OMA::OMABIN/gen?op=disconnect&item=$row[0]&opa_page=$row[1]>". mediatitle("opa",$row[1],$row[2]). "</a> page $row[3]<br/>";
#		  print "<a href=\"$OMA::OMABIN/gen?op=disconnect&item=$item&opa_page=$row[1]\">picture: $row[0] - $row[1]</a><br/>";
	}
	$st->finish();
	print "<br/>";

#
#	$st=$db->prepare("SELECT * FROM ora_conn WHERE item_sid=$item");
#	$st->execute();
#	while(@row=$st->fetchrow()) {
#		print "<img align=\"top\" src=\"/img/audio.png\"/> [audio] <a href=\"$OMA::OMABIN/gen?op=disconnect&item=$row[0]&ora_page=$row[1]\">". mediatitle("ora",$row[1],$row[2]). "</a> page $row[3]<br/>";
#	}
#	$st->finish();
#	print "<br/>";
#
#	$st=$db->prepare("SELECT * FROM newasset_conn WHERE item_sid=$item");
#	$st->execute();
#	while(@row=$st->fetchrow()) {
#		print "<img align=\"top\" src=\"/img/newasset.png\"/> [newasset] <a href=\"$OMA::OMABIN/gen?op=disconnect&item=$row[0]&newasset_page=$row[1]\">". mediatitle("newasset",$row[1],$row[2]). "</a> page $row[3]<br/>";
#	}
#	$st->finish();
#

	print "</ul></font></font>";
}


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

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

sub makeconnect {
	my @row;
	my $st;
	my $id, $base, $linked;

	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();

	if($row[0]!=$in{'item'}) {
		print "Can't find item.<br/>";
		doexit;
	}
	
#loopverdacht
	($id,$base,$linked) = parseid("ova",$in{'ova_page'});
	if($id>0) {
		XSQL::transopen();
		XSQL::transact("INSERT INTO ova_conn VALUES ($in{'item'},$id,'$base',$in{'vpage'},$linked)");
		XSQL::transclose();

		print "Video connected from item.<br/>";
	}

	($id,$base,$linked) = parseid("reboot",$in{'reboot_page'});
	if($id>0) {
		XSQL::transopen();
		XSQL::transact("INSERT INTO reboot_conn VALUES ($in{'item'},$id,'$base',$in{'rebootpage'},$linked)");
		XSQL::transclose();

		print "reboot connected from item.<br/>";
	}

	($id,$base,$linked) = parseid("opa",$in{'opa_page'});
	if($in{'opa_page'}) {

		XSQL::transopen();
		XSQL::transact ("INSERT INTO opa_conn VALUES ($in{'item'},$id,'$base',$in{'ppage'},$linked)");
		XSQL::transclose();

		print "Picture connected from item.<br/>";
	}

	($id,$base,$linked) = parseid("ota",$in{'ota_page'});
	if($in{'ota_page'}) {
		XSQL::transopen();
		XSQL::transact("INSERT INTO ota_conn VALUES ($in{'item'},$id,'$base',$in{'tpage'},$linked)");
		XSQL::transclose();

		print "Text connected from item.<br/>";
	}

#
#	($id,$base,$linked) = parseid("ora",$in{'ora_page'});
#	if($id>0) {
#		XSQL::transopen();
#		XSQL::transact("INSERT INTO ora_conn VALUES ($in{'item'},$id,'$base',$in{'apage'},$linked)");
#		XSQL::transclose();
#
#		print "Audio connected from item.<br/>";
#	}
#
#	($id,$base,$linked) = parseid("newasset",$in{'newasset_page'});
#	if($id>0) {
#		XSQL::transopen();
#		XSQL::transact("INSERT INTO newasset_conn VALUES ($in{'item'},$id,'$base',$in{'newassetpage'},$linked)");
#		XSQL::transclose();
#
#		print "newasset connected from item.<br/>";
#	}
#

	connectform($in{'item'});
	doexit;

}


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

sub disconnect {
	my @row;
	my $st;

	$st=$db->prepare("SELECT * FROM item WHERE sid=$in{'item'}");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();

	if($row[0]!=$in{'item'}) {
		print "Can't find item.<br/>";
		doexit;
	}

	if($in{'ova_page'}) {
		XSQL::transopen();
		XSQL::transact("DELETE FROM ova_conn WHERE item_sid=$in{'item'} and ova_page=$in{'ova_page'}");
		XSQL::transclose();

		print "Video disconnected from item.<br/>";
	}

	if($in{'reboot_page'}) {
		XSQL::transopen();
		XSQL::transact("DELETE FROM reboot_conn WHERE item_sid=$in{'item'} and reboot_page=$in{'reboot_page'}");
		XSQL::transclose();

		print "reboot disconnected from item.<br/>";
	}

	if($in{'opa_page'}) {
		XSQL::transopen();
		XSQL::transact("DELETE FROM opa_conn WHERE item_sid=$in{'item'} and opa_page=$in{'opa_page'}");
		XSQL::transclose();

		print "Picture disconnected from item.<br/>";
	}

	if($in{'ota_page'}) {
		XSQL::transopen();
		XSQL::transact("DELETE FROM ota_conn WHERE item_sid=$in{'item'} and ota_page=$in{'ota_page'}");
		XSQL::transclose();

		print "Text disconnected from item.<br/>";
	}

#
#	if($in{'ora_page'}) {
#		XSQL::transopen();
#		XSQL::transact("DELETE FROM ora_conn WHERE item_sid=$in{'item'} and ora_page=$in{'ora_page'}");
#		XSQL::transclose();
#
#		print "Audio disconnected from item.<br/>";
#	}
#	if($in{'newasset_page'}) {
#		XSQL::transopen();
#		XSQL::transact("DELETE FROM newasset_conn WHERE item_sid=$in{'item'} and newasset_page=$in{'newasset_page'}");
#		XSQL::transclose();
#
#		print "newasset disconnected from item.<br/>";
#	}
#

	connectform($in{'item'});
	doexit;
}



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

sub treecookie {
	my $query, $cookie, $items, @old;
	my $treemember, $i;
	my $clicked;

	$query = new CGI();

	$clicked = $query->param("node");

	$treemember = "1/";
	$isopen{1} = 1;

	if($in{'op'} eq "collapse") {
		$in{'op'} = "ilink";
	} else {
		@old = split(/\//,$query->cookie('omatree'));
		for($i=0;$i<=$#old;$i++) {
			if(!$isopen{$old[$i]}) {
				$treemember .= "$old[$i]/";
				$isopen{$old[$i]} = 1;
			}
		}
		if($in{'fc'}) {
			chop($treemember);
			return($treemember);
		}
		if(!$isopen{$clicked}) {
				$treemember .= "$clicked/";
				$isopen{$clicked} = 1;
		}
		else {
			$treemember =~ s/\/$clicked\//\//g;
			$isopen{$clicked} = '';
		}
	}
	chop($treemember);
	$cookie = $query->cookie( -name=>'omatree',
						-value=>$treemember,
						-expires=>'+3h'
	);
	print $query->header(-cookie=>$cookie);

	return($treemember);
}




           ###     ##     ##      ##                              ###
            ##            ##      ##                               ##
  ####   #####    ###    #####   #####    ####   ## ##  ## ###     ##
 ##  ## ##  ##     ##     ##      ##     ##  ## #######  ##  ##    ##
 ###### ##  ##     ##     ##      ##     ###### ## # ##  ##  ##    ##
 ##     ##  ##     ##     ## ##   ## ##  ##     ## # ##  #####     ##
  ####   ### ##   ####     ###     ###    ####  ##   ##  ##       ####
                                                        ####
sub edittempl {

	$in{'type'} = "meta" if(!$in{'type'});
	if($in{'type'} eq "search" || $in{'type'} eq "homepage") {
    	print "<b>[Template form for $in{'type'}]</b><p>
HEAD<br/>
<form method=\"post\">
<input type=\"hidden\" name=\"node\" value=\"1\">
<input type=\"hidden\" name=\"type\" value=\"$in{'type'}_head\">
<input type=\"hidden\" name=\"op\" value=\"savetempl\">
<font size=\"-1\">
<textarea name=\"templ\" rows=\"20\" cols=\"80\">". OMA::filterform(OMA::loadtempl(1,"$in{'type'}_head")) ."</textarea>
</font>
<br/>
<input type=\"submit\" name=\"save\" value=\"save\">
</form>
<p>
BODY<br/>
<form method=\"post\">
<input type=\"hidden\" name=\"node\" value=\"1\">
<input type=\"hidden\" name=\"type\" value=\"$in{'type'}_body\">
<input type=\"hidden\" name=\"op\" value=\"savetempl\">
<font size=\"-1\">
<textarea name=\"templ\" rows=\"20\" cols=\"80\">". OMA::filterform(OMA::loadtempl(1,"$in{'type'}_body")) ."</textarea>
</font>
<br/>
<input type=\"submit\" name=\"save\" value=\"save\">
</form>
<p>
BOTTOM<br/>
<form method=\"post\">
<input type=\"hidden\" name=\"node\" value=\"1\">
<input type=\"hidden\" name=\"type\" value=\"$in{'type'}_bottom\">
<input type=\"hidden\" name=\"op\" value=\"savetempl\">
<font size=\"-1\">
<textarea name=\"templ\" rows=\"20\" cols=\"80\">". OMA::filterform(OMA::loadtempl(1,"$in{'type'}_bottom")) ."</textarea>
</font>
<br/>
<input type=\"submit\" name=\"save\" value=\"save\"> <input type=\"submit\" name=\"delete\" value=\"delete\">
</form>";
		doexit;
	}

	if(($in{'type'} eq "reboot") || ($in{'type'} eq "ova") || ($in{'type'} eq "opa")|| ($in{'type'} eq "ota")) {
    	print "<b>[Template form for $in{'type'}]</b><p>
MAIN TEMPLATE<br/>
<form method=\"post\">
<input type=\"hidden\" name=\"node\" value=\"$in{'node'}\">
<input type=\"hidden\" name=\"type\" value=\"$in{'type'}\">
<input type=\"hidden\" name=\"op\" value=\"savetempl\">
<font size=\"-1\">
<textarea name=\"templ\" rows=\"20\" cols=\"80\">". OMA::filterform(OMA::loadtempl($in{'node'},"$in{'type'}")) ."</textarea>
</font>
<br/>
<input type=\"submit\" name=\"save\" value=\"save\">
</form>
<p>
ATTRIBUTE TEMPLATE<br/>
<form method=\"post\">
<input type=\"hidden\" name=\"node\" value=\"$in{'node'}\">
<input type=\"hidden\" name=\"type\" value=\"$in{'type'}_attrib\">
<input type=\"hidden\" name=\"op\" value=\"savetempl\">
<font size=\"-1\">
<textarea name=\"templ\" rows=\"20\" cols=\"80\">". OMA::filterform(OMA::loadtempl($in{'node'},"$in{'type'}_attrib")) ."</textarea>
</font>
<br/>
<input type=\"submit\" name=\"save\" value=\"save\">
</form>";
		doexit;
	}

	
		
    print "<b>[Template form for $in{'type'}]</b><p>
<form method=\"post\">
<input type=\"hidden\" name=\"node\" value=\"$in{'node'}\">
<input type=\"hidden\" name=\"type\" value=\"$in{'type'}\">
<input type=\"hidden\" name=\"op\" value=\"savetempl\">
<font size=\"-1\">
<textarea name=\"templ\" rows=\"20\" cols=\"80\">". OMA::filterform(OMA::loadtempl($in{'node'},$in{'type'})) ."</textarea>
</font>
<br/>
<input type=\"submit\" name=\"save\" value=\"save\"> <input type=\"submit\" name=\"delete\" value=\"delete\">
</form>";
	doexit;
}



                                  ##                              ###
                                  ##                               ##
  ####   ####    ##  ##   ####   #####    ####   ## ##  ## ###     ##
 ##         ##   ##  ##  ##  ##   ##     ##  ## #######  ##  ##    ##
  ####   #####   ##  ##  ######   ##     ###### ## # ##  ##  ##    ##
     ## ##  ##    ####   ##       ## ##  ##     ## # ##  #####     ##
 #####   ### ##    ##     ####     ###    ####  ##   ##  ##       ####
                                                        ####
sub savetempl {
	local $st, @row, $templ;
	local $check;
   

	if($in{'delete'}) {
		XSQL::transopen();
		XSQL::transact("DELETE FROM template WHERE node_sid=$in{'node'} AND type='$in{'type'}'");
		XSQL::transclose();

		print "Template deleted<p>\n";      
		doexit;
	}
		
	$st=$db->prepare("SELECT * FROM template WHERE node_sid=$in{'node'} AND type='$in{'type'}'");
	$st->execute();
	@row=$st->fetchrow();
	$st->finish();
   
	$templ = $in{'templ'};
	$templ =~ s/'/\\'/g;

	if($row[0] == $in{'node'}) {      
		XSQL::transopen();
		XSQL::transact("
			UPDATE template
			SET template='$templ'
			WHERE node_sid=$in{'node'}
			AND type='$in{'type'}'
		");
		XSQL::transclose();
	} else {
		XSQL::transopen();
		XSQL::transact("
			INSERT INTO template      
			VALUES ($in{'node'},'$in{'type'}','$templ')
		");
		XSQL::transclose();
	}
	$check = `/opt/oma/run/oma-bin/templcheck $in{'node'} $in{'type'}`;
	print $check;
	print "Template saved<p>\n";      
	doexit;
}  


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

sub newboard {
	my $st;
	if($in{'node'}) {
		NEWS::newgrp(OMA::newsname($in{'node'}));
		NEWS::updatehtml($in{'node'});

		XSQL::transopen();
		XSQL::transact("UPDATE treemap SET msgboard=1 WHERE sid=$in{'node'}");
		XSQL::transclose();
	}
	print "Done.\n";
	doexit;
}


 ## ##   ##  ## ## ###    ####  ##   ##   ####    ##### ## ###  ## ###
#######  ##  ##  ##  ##  ##  ## ## # ##  ##      ##  ##  ### ##  ##  ##
## # ##  ##  ##  ##  ##  ###### ## # ##   ####   ##  ##  ##      ##  ##
## # ##   ####   ##  ##  ##     #######      ##   #####  ##      #####
##   ##    ##    ##  ##   ####   ## ##   #####       ## ####     ##
                                                 #####          ####
sub mvnewsgrp {
	if($in{'oldnode'} && $in{'newnode'}) {
		NEWS::rengrp(OMA::newsname($in{'oldnode'}),OMA::newsname($in{'newnode'}));
	}
	print "Done.\n";
	doexit;
}


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

sub delboard {
	my $st;
	if($in{'node'}) {
		NEWS::delgrp(OMA::newsname($in{'node'}));

		XSQL::transopen();
		XSQL::transact("UPDATE treemap SET msgboard=0 WHERE sid=$in{'node'}");
		XSQL::transclose();
	}
	print "Done.\n";
	doexit;
}


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

local %in;
undef %in;
local $t=0;
local $leer="";
local $TOPSDIR=$OMA::BASEPATH;
local $isok;
local $query;
local $globalmap;
local @allopen, %isopen;
local %count;
undef @allopen;
undef %isopen;
undef %count;

$db = OMA::opendb() if(!$db);

CGI::ReadParse();
local $query = new CGI();


download() if($query->param("op") eq "download");
if(!$query->param('op')) {
	print "<frameset rows=300,*><frame name=upwork src=$OMA::OMABIN/gen?op=ilink><frame name=dwnwork src=/></frameset>\n";
	doexit;
}

($clicked) = treecookie() if($in{'op'} ne "additem");

print <<EOF;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>OMA Admin</title>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">

<style>
body { font-family:arial; font-weight:bold; font-size:11px; color:#606060; background:#e0e0e0; }
td { font-family:arial; font-weight:bold; font-size:11px; }
input,textarea,select { font-family:arial; font-weight:bold; font-size:11px; background:#e0e0ff; }
</style>

<span style="font-family:helvetica,verdana,arial">
</head>

<body bgcolor="#dfdfdf" link="#007700" vlink="#770000">

<!--
<script language="JavaScript">
	function Go(x) {
		this.location=x;
	}
	function Go2(x) {
//		cw = window.open(x, "cmd", "width=540,height=500,resizable=yes,menubar=no,locationbar=no,status=no,scrollbars=yes,toolbar=yes");
//		cw.focus();
		parent.frames[3].location.href=x;

	}
</script>
-->
EOF

sub isMember {
	return(1);
}

OMA::savemap(1);
getmap(1);
$isok = isMember("DOKU");
additem		if($in{'op'} eq "additem");
changenode	if($in{'op'} eq "changenode");
delboard	if($in{'op'} eq "delboard");
delitem		if($in{'op'} eq "delitem");
delnode		if($in{'op'} eq "delnode");
disconnect	if($in{'op'} eq "disconnect");
edititem	if($in{'op'} eq "edititem");
edittempl	if($in{'op'} eq "edittempl");
makeconnect	if($in{'op'} eq "makeconnect");
movenode	if($in{'op'} eq "movenode");
mvnewsgrp	if($in{'op'} eq "mvnewsgrp");
newboard	if($in{'op'} eq "newboard");
saveitem	if($in{'op'} eq "saveitem");
savenode	if($in{'op'} eq "savenode");
savetempl	if($in{'op'} eq "savetempl");
showitem	if($in{'op'} eq "showitem");
updateitem	if($in{'op'} eq "updateitem");

print <<EOF; 
<style type="text/css">

ul {
    font: 10pt, Arial,Helvetica,sans-serif;
    margin-left: 5px;
    padding-left: 5px;
    height: 4px;
}

</style>
EOF


if($isok > 0) {
	print "<font size=\"+1\"><b><a href=\"$OMA::OMABIN/gen?op=collapse\">Close tree</a></b></font><br/>";
	print "<a target=\"dwnwork\" href=\"$OMA::OMABIN/gen?op=additem&node=1\">/<b>root <img border=\"0\" width=\"12\" src=\"http://$OMA::OMAHOST/img/edit.png\"/></b></a><br/>";
}
else {
	print "<h2><a href=\"$OMA::OMABIN/gen?op=collapse\">collapse</a></h2>";
	print "/ MM Struct<br/>";
}
overview(1) if($in{'op'} eq "ilink");
finditem($in{'sid'}) if($in{'op'} eq "finditem");
showtree(0,0) if($in{'op'} eq "showtree");

doexit;
