#!/usr/bin/perl 

# Index Finger Pro v4.101
# Developed by Index Finger, Inc. - www.indexfinger.com
# Copyright 1998-99 Index Finger, Inc. - All rights reserved.

$thisprogram = "search.cgi";
$operatingsystem = "unix";

if (($operatingsystem eq "nt") || ($operatingsystem eq "other")) { 
    $ifdirectory = "D:/home/indexfinger/";
    }

$filetorequire = "$ifdirectory" . "config.cgi";
require "$filetorequire";
$filetorequire = "$ifdirectory" . "config-admin.cgi";
require "$filetorequire";
$filetorequire = "$ifdirectory" . "variables/setup.cgi";
require "$filetorequire";
$filetorequire = "$ifdirectory" . "programs.cgi";
require "$filetorequire";
$filetorequire = "$ifdirectory" . "subroutes.cgi";
require "$filetorequire";


&parsequery;
    $action = $QUERY{'action'};

&parseform;
    $inend = $FORM{'end'};
    $inreturn = $FORM{'return'};
    $insearch = $FORM{'search'};
    $incount = $FORM{'count'};
    $insearchwhere = $FORM{'searchwhere'};


# Variables for template.
$requestline = "$requestprogram";        # $request variable information.
$subscriberline = "$subscriberprogram";  # $subscriber variable information.

    &nonhtmlmainmenu;

$output .= "<a href=\"$directoryurl/$frontpage\">Home</a> / <p>\n";

if ($action eq "search") {

    if ($insearchwhere eq "") { $insearchwhere = "every category"; }

    $filetoopen = "variables/categories.cgi";
    open(FILE,"$filetoopen");
    flock(FILE,2);
    @categoriesdata = <FILE>;
    close(FILE);

    @searchwords = split(/\,/,$insearch);

    # Search main groups.

    foreach $category (@categoriesdata) {
        chomp($category);
        ($maingroupid,$thisgroupid,$groupid,$groupname,$status,$sitetotal,$lastadded,$description) = split(/\|/,$category);

        # String to search.

        $searchstring = "$groupname $description";

        $found = "no";

        if (($insearchwhere eq "$thisgroupid") && ($insearchwhere ne "every category")) {
            foreach $part (@searchwords) {
                if ($searchstring =~ /$part/gi) {
                    $found = "yes";
                    $idchain = "$maingroupid-$thisgroupid-$groupid";
                    &getcategoryinfo($idchain);
                    $location =~ s/$part/<b>$part<\/b>/isg;          
                    }
                }
            }

        elsif (($insearchwhere ne "$groupid") && ($insearchwhere ne "every category")) {
            }

        else {
            foreach $part (@searchwords) {
                if ($searchstring =~ /$part/gi) {
                    $found = "yes";
                    $idchain = "$maingroupid-$thisgroupid-$groupid";
                    &getcategoryinfo($idchain);
                    $location =~ s/$part/<b>$part<\/b>/isg;          
                    }
                }
            }


        if ($found eq "yes") {
            $rearrange = ("$groupname|$maingroupid|$thisgroupid|$groupid|$sitetotal|$location");
            push(@resultscategories, $rearrange);
            $foundcategories = "yes";
            $foundsome = "yes";
            }
        }



    # Search sites.

    $filetoopen = "variables/sites.cgi";
    open(FILE,"$filetoopen");
    @filedata = <FILE>;
    close(FILE);

    @searchwords = split(/\,/,$insearch);

    foreach $site (@filedata) {
        chomp($site);
        ($siteid,$idchain,$timeadded,$position,$sitename,$siteurl,$iconinfo,$status,$sitedesc,$votes,$totalscore) = split (/\|/,$site);
        ($maingroupid,$thisgroupid,$groupid) = split (/\-/,$idchain);

        # String to search.

        $searchstring = "$sitename $sitedesc $siteurl";

        # Split words to search.

        $found = "no";

        if (($insearchwhere eq "$groupid") && ($insearchwhere ne "every category")) {
            foreach $part (@searchwords) {
                if ($searchstring =~ /$part/gi) {
                    $found = "yes";
                    $sitename =~ s/$part/<b>$part<\/b>/isg;
                    $sitedesc =~ s/$part/<b>$part<\/b>/isg;
                    }
                }
            }

        else {
            foreach $part (@searchwords) {
                if ($searchstring =~ /$part/gi) {
                    $found = "yes";
                    $sitename =~ s/$part/<b>$part<\/b>/isg;
                    $sitedesc =~ s/$part/<b>$part<\/b>/isg;
                    }
                }
            }

        if ($found eq "yes") {
            $rearrange = "$sitename|$siteid|$idchain|$timeadded|$position|$siteurl|$iconinfo|$status|$sitedesc|$votes|$totalscore";
            push(@resultssites, $rearrange);
            $foundsites = "yes";
            $foundsome = "yes";
            }
        }





    if ($foundsome eq "yes") {

        unless ($inend > 0) { $inend = 0; }
        $rangemin = $inend;
        $rangemax = $inend + $inreturn;


        $matchesgroups = @resultscategories;
        $endlimitgroups = $matchesgroups;

#        $output .= "$matchesgroups<p>";

        if ($matchesgroups < 1 || $endlimitgroups < $inend) { $showgroups = "no"; }
        else {
            $showgroups = "yes";
            $arraystartgroups = $inend;
            $showstartgroups = $arraystartgroups + 1;
            if ($endlimitgroups < $rangemax) { $arrayendgroups = $matchesgroups - 1; }
            else {
                $arrayendgroups = $rangemax - 1;
                $showmore = "yes";
                }
            $showendgroups = $arrayendgroups + 1;
            }



        $matchessites = @resultssites;
        $startlimitsites = $matchesgroups + $matchessgps;
        $endlimitsites = $matchesgroups + $matchessgps + $matchessites;

#        $output .= "$matchessites<p>";

        if ($matchessites < 1) { $showsites = "no"; }

        elsif (($rangemax < $startlimitsites) || ($endlimitsites < $rangemin)) { $showsites = "no"; }

        else {
            $showsites = "yes";
            if ($inend <= $startlimitsites) { $arraystartsites = 0; }
            else { $arraystartsites = $inend - $startlimitsites; }

            $showstartsites = $arraystartsites + 1;
            if ($endlimitsites <= $rangemax) { $arrayendsites = $matchessites - 1; }
            else {
                $arrayendsites = $rangemax - $matchesgroups - $matchessgps - 1;
                $showmore = "yes";
                }
            $showendsites = $arrayendsites + 1;
            }



        # Count Stuff

        if ($incount > 1) { $count = $incount; }
        else { $count = 1; }

        # Produce sub-group results, if any.

        if ($showgroups eq "yes") {
            if ($matchesgroups > 1) { $type = "categories"; }
            else { $type = "category"; }
            $output .= "<b>$matchesgroups $type found - ( showing $showstartgroups thru $showendgroups )</b><p>\n";
            $output .= "<ul>\n";
            foreach $result (sort @resultscategories[$arraystartgroups .. $arrayendgroups]) {
                ($groupname,$maingroupid,$thisgroupid,$groupid,$sitetotal,$location) = split(/\|/,$result);
                $output .= "<b>$count.</b> <a href=\"$directoryurl/html/$groupid.$fileext\">$location</a><p>\n";
                $count++;
                }
            $output .= "</ul><p>\n";
            if ($showendgroups == $matchesgroups) { $count = 1; }
            }

        if ($showsites eq "yes") {
            if ($matchessites > 1) { $type = "sites"; }
            else { $type = "site"; }
            $output .= "<b>$matchessites $type found - ( showing $showstartsites thru $showendsites )</b><p>\n";
            $output .= "<ul>\n";
            foreach $result (sort @resultssites[$arraystartsites .. $arrayendsites]) {
                ($sitename,$siteid,$idchain,$timeadded,$position,$siteurl,$iconinfo,$status,$sitedesc,$votes,$totalscore) = split(/\|/,$result);
                $output .= "<b>$count.</b> <a href=\"$siteurl\">$sitename</a> - $sitedesc<p>\n";
                $count++
                }
            $output .= "</ul><p>\n";
            if ($showendsites == $matchessites) { $count = 1; }
            }


        if ($showmore eq "yes") {
            &showmorelink;
            }


        }


    else {
        $output .= "Your Search Produced No Results.<p>\n";
        &searchform;
        $output =~ s/Directory Search/Would you like to try again below\?/;
        &gethtmlpage("variables/search-help.html");
        }

    }

else {
    &searchform;
    &gethtmlpage("variables/search-help.html");
    }


    &nonhtmlpoweredby;


if (-e $searchtemplate) {
    open(TEMPLATE,"$searchtemplate");
    flock(TEMPLATE,2);
    @template = <TEMPLATE>;
    close(TEMPLATE);
    foreach $line (@template) { $body = "$body$line"; }
    }



    &template;





sub searchform {
    $output .= "<b>Directory Search</b><p>\n";
    $output .= "<form action=\"search.cgi?action=search\" method=post>\n";
    $output .= "<input type=hidden name=\"return\" value=\"25\">\n";
    $output .= "</font>\n";
    $output .= "<font size=\"3\" face=\"verdana,arial\">\n";
    $output .= "<input type=text name=\"search\" size=20><p>\n";
    $output .= "</font>\n";
    $output .= "<font size=\"2\" face=\"verdana,arial\">\n";
    $output .= "<input type=submit value=\"Search\"> <input type=reset value=\"Reset\"><p>\n";
    $output .= "</form>\n";
    }

sub showmorelink {
    $newend = $inend + $inreturn;
    $output .= "&nbsp\;<p>\n";
    $output .= "<form action=\"search.cgi?action=search\" method=post>\n";
    $output .= "<input type=hidden name=\"return\" value=\"$inreturn\">\n";
    $output .= "<input type=hidden name=\"search\" value=\"$insearch\">\n";
    $output .= "<input type=hidden name=\"end\" value=\"$newend\">\n";
    $output .= "<input type=hidden name=\"count\" value=\"$count\">\n";
    $output .= "<input type=submit value=\"Next $inreturn\"><p>\n";
    $output .= "</form>\n";
    }