#!/usr/bin/perl
# ----------------------------------------------------------------------------
#
#  (c) Copyright 2006 TradeExtender
# 
#  This software is proprietary to  embodies the confidential technology 
#  of TradeExtender. Possession, use, duplication or dissemination of the 
#  software and media is authorized only pursuant to a valid written license 
#  from TradeExtender.
#
# Remakr there are still some leftovers for succes and correct parameters
 
use strict;
use lib "/var/www/vhosts/kantelpunten.com/httpdocs/pl/lib";
use lib "lib";
BEGIN {
    delete $INC{"Kantelpunten/Helper.pm"};
    delete $INC{"Kantelpunten/Process.pm"};
#    delete $INC{"Kantelpunten/MyRobots.pm"};
    delete $INC{"Kantelpunten/MyBudy.pm"};
    delete $INC{"Kantelpunten/MyAdds.pm"};
    delete $INC{"Kantelpunten/MyContent.pm"};
}
use Kantelpunten::Helper;
use Kantelpunten::Process;
use Kantelpunten::MyRobots;
use Kantelpunten::MyBudy;
use Kantelpunten::MyAdds;
use POSIX qw(strftime);
use Data::Dumper;

use constant MAX_COLUMN	=> 9;

local our $stocks;
local our $data;
local our $param;
local our $page;
local our $total_ok  = 0;
local our $total_nok = 0;
local our $cur_kdate;

show_scan_overview();
exit(0);

sub show_scan_overview()
{
	my $q = CGI->new;

	$param->{sort} 		= 1;
	$param->{trigger}	= defined($q->param('trigger')) ? 1 : undef;
	$param->{mail}		= defined($q->param('mail')) ? 1 : undef;
	$param->{all}		= defined($q->param('all')) ? 1 : undef;
	$param->{mine}		= defined($q->param('mine')) ? 1 : undef;
	$param->{recent}	= defined($q->param('recent')) ? 1 : undef;
	$param->{open}		= defined($q->param('open')) ? 1 : undef;
	$param->{type} 		= $q->param('type');
	$param->{reverse} 	= $q->param('reverse');
	$param->{column} 	= $q->param('column');
	$param->{market}    = $q->param('market');
	$param->{rb} 		= $q->param('rb');
	$param->{redirect}	= defined($q->param('redirect')) ? 1 : undef;

	my $remote_ip = init_helper();
	$param->{rb} = get_robot() if (!defined($param->{rb}) || $param->{rb});
	set_robot($param->{rb});

	init_process();

	$total_ok  = 0;
	$total_nok = 0;
	$cur_kdate = undef;

	get_user_rec();
	$param->{budy} = init_budy($q->param('uitleg'));
	
	# check for a market change
	my $market = set_market();
	# oops I'v to add bel if no enabled anymore
	if (defined($market) && ($market & (1 << get_market_bit('bel20'))) && !($market & (1 << get_market_bit('bel'))))
	{
		$market |= (1 << get_market_bit('bel'));
	}
	if (defined($param->{market}) && defined($market))
	{
		$param->{market} = 0xff if (($param->{market} & 0x7f) == 0);
		if ($param->{market} != $market)
		{
			set_market($param->{market});
			write_user_rec();
		}
		$market = $param->{market};
	}
	$market = 0xff if (!defined($market));

	# translate old type into the new method
	if (defined($param->{type}))
	{
		$param->{all}     = 1 if (($param->{type} eq "alle") || ($param->{type} eq "open"));
		$param->{mine}    = 1 if ($param->{type} eq "eigen");
		$param->{recent}  = 1 if (($param->{type} eq "alle") || ($param->{type} eq "eigen"));
		$param->{open}    = 1 if ($param->{type} eq "open");
		# disable old features
		if (!is_admin_user())
		{
			$param->{recent}  = undef;		
			$param->{open}    = 1;
		}
		$param->{type} = undef;
	}

	# fix wrongly selected items
	if (!is_admin_user())
	{
		$param->{trigger} = undef;
		$param->{recent}  = undef;
	}
	$param->{all} = undef if (defined($param->{all}) && defined($param->{mine}));
	$param->{recent} = undef if (defined($param->{recent}) && defined($param->{open}));
	$param->{reverse} = undef if (defined($param->{reverse}) && ($param->{reverse} != 0) && ($param->{reverse} != 1));
	$param->{column} = undef if (defined($param->{column}) && (($param->{column} < 0) || ($param->{column} > MAX_COLUMN)));
	# disable if no sort
	$param->{column} = undef if (!$param->{sort});
	$param->{reverse} = undef if (!$param->{sort});

	# first check if we have to disable some current info  
	my $cinfo = get_scan_cookie();
	$cinfo &= 0xfffd if (defined($param->{all}));
	$cinfo &= 0xfffe if (defined($param->{mine}));
	$cinfo &= 0xfff7 if (defined($param->{recent}));
	$cinfo &= 0xfffb if (defined($param->{open}));
	$cinfo &= 0xffef if (defined($param->{reverse}));
	$cinfo &= 0xfe1f if (defined($param->{column}));

	# now make the new info 
	my $info = 0;
	$info |= 0x0001 if (defined($param->{all}));
	$info |= 0x0002 if (defined($param->{mine}));
	$info |= 0x0004 if (defined($param->{recent}));
	$info |= 0x0008 if (defined($param->{open}));
	$info |= 0x0010 if (defined($param->{reverse}) && ($param->{reverse} == 1));
	$info |= ($param->{column} << 5) if (defined($param->{column}));
	$info |= $cinfo;
	add_scan_cookie($info) if ($cinfo != $info);

	# now make the new values using the new info
	$param->{all}      = ($info & 0x0001) ? 1 : undef;
	$param->{mine}     = ($info & 0x0002) ? 1 : undef;
	$param->{recent}   = ($info & 0x0004) ? 1 : undef;
	$param->{open}     = ($info & 0x0008) ? 1 : undef;
	$param->{reverse}  = ($info & 0x0010) ? 1 : 0;
	$param->{column}   = ($info & 0x03e0) >> 5;

	# finaly set the default if not selected yet
	$param->{all}    = 1 if (!defined($param->{all}) && !defined($param->{mine}));    	# default is all
	$param->{recent} = undef;
	$param->{open}   = 1 if (!defined($param->{open}) && !defined($param->{recent}));   # default is open

	# disable again if it was set by a cookie
	$param->{column} = 0 if (!$param->{sort});
	$param->{reverse} = 0 if (!$param->{sort});

	# make sure values are disabled if not needed for this type
	$param->{column} = 0 if (($param->{column} == 6) || ($param->{column} == 7) || ($param->{column} == 8));

	# change default into correct column
	$param->{column} = 3 if (($param->{column} == 0) && defined($param->{open}));
	$param->{column} = 1 if ($param->{column} == 0);

	$page = undef;
	if (!defined($page))
	{
		$page = 9990 if (defined($param->{mine}) && defined($param->{recent}));
		$page = 9989 if (defined($param->{all}) && defined($param->{recent}));
		$page = 9984 if (defined($param->{mine}) && defined($param->{open}));
		$page = 9983 if (defined($param->{all}) && defined($param->{open}));
		$page = 9940 if (defined($page) && $page == 9983 && defined($param->{redirect}));
		$page = 9941 if (defined($page) && $page == 9984 && defined($param->{redirect}));
	}
#	$param->{kantelpunt} = (!is_trial_user() && (is_logged_in() || is_trial_period())) ? 1 : undef;
	$param->{kantelpunt} = (is_basis_user()) ? 1 : undef;
	$param->{regi} = (!is_trial_user() && (is_logged_in() || is_trial_period())) ? 1 : undef;
	
	if (!defined($page))
	{
    	print_error_doc("Gekozen scan overview $param->{type} wordt niet ondersteund.");
	    exit(0);
	}

	if (defined($param->{mail}))
	{
		if (defined($param->{rb}) && $param->{rb})
		{
			# no send mail if identified as robot
			log_problem("show_scan_overview: Send mail requested by robot?");
			exit(0);
		}
		if (($page != 9989) && ($page != 9987))
		{
			$param->{mail} = undef;
		}
	}

	if (defined($param->{mine}))
	{
		# will stop if not registered otherwise continue ...
    	only_allowed_for_registered_users();
		$stocks = get_stocks_mine();
	}
	else
	{
		$stocks = get_stocks_market($market);
		if (!defined($stocks))
		{
    		print_error_doc("SSO: Probleem met het lezen van de aandelen data.");
    		exit(0);
		}
	}

	$data = read_all_quote_data();
	if (!defined($data))
	{
    	print_error_doc("Probleem met het lezen van de kantelpunten data.");
    	exit(0);
	}

	add_last_page_cookie($page) if (!defined($param->{mail}));
	write_access_data($remote_ip, $page) if (!defined($param->{mail}));

	make_scanpunten_overview_html($market) if (!defined($param->{mail}));
	send_scanpunten_overview() if (defined($param->{mail}));
}
    
sub make_scanpunten_overview_html(@)
{
	my ($market) = @_;
	
    my $script;
	my $script = "";  # make_script();
    $script .= make_home_script($page) if (!is_admin_user());
	my $title = "Beursscanner : Overzicht scansignalen - Ook voor de actieve belegger.";
	my $desc  = "Elke dag nieuw scansignalen die u als actieve belegger kan gebruiken als leidraad" .
	    " om uw eigen beslissingen te nemen. Het kan allemaal bij ons, naast de volledige" .
	    " kantelpunten adviezen, de technische analyse signalen waarop u zelf kan beslissen.";
	    
    my $pop_menu = make_pop_menu(defined($param->{mine}) ? 2 : 4, $page);	
    my $top_menu = make_top_menu(defined($param->{mine}) ? 2 : 4, $page);	
    
    print_header("+1s");
    print_pre_doc();
    print_head($title, undef, undef, undef, $script, "kantelpunt", defined($param->{mine}) ? "eigen" : undef, undef, $desc, undef, "top_script");
    print_body(defined($param->{mine}) ? "eigen" : "kantel", undef, undef, undef, undef, undef, undef, "kader", undef, $pop_menu, $top_menu);
    print make_bb_popup();
    make_scanpunten_overview($market);
    print_body("end_kader");
    print_post_doc();
}

sub send_scanpunten_overview()
{
    # first we need to write the information to a file
    my $sesid = get_session_cookie();
    my $userid = get_userid_cookie();
    $sesid = 0 unless defined($sesid);
    $userid = 0 unless defined($userid);
    my $time = time();
    my $filename = "${userid}_${sesid}_${page}_${time}.html";
	my $file = get_public_dir() . "mail/$filename";
	
    if (open(TXT, ">$file"))
    {
	    make_scanpunten_overview(0xff);
	    close TXT;
	}
	else
	{
    	print_error_doc("Probleem met het aanmaken van de pagina.");
    	exit(0);
	}
	print_redirect("SendPage.pl?page=$page&time=$time");
}

sub get_scanpunten_ids(@)
{
	my ($sel_type) = @_;
	
	my @ids;
    my @date_ids;
	my @int_ids;
	my $names;
	my $mkts;
    my $difs;
    my $days;
    my $type;
    my $t;
    my $trigs;
    my $follow;
	if (defined($param->{open}) || defined($param->{recent}))
    {
        # if it is open show every kantelpunten not having a trigger date yet ...
        foreach my $i (keys %$data)
        {
            next if ($i == 0);
            next if (!defined($stocks->{$i}));
            next if (defined($param->{open}) && (($data->{$i}->{scan_type} eq 'T') || ($data->{$i}->{scan_type} eq 't')));
     		next if (defined($param->{recent}) && !is_new_kantelpunt($data->{$i}->{scan_time}));       
            $names->{$stocks->{$i}->{index_name}} = $i;
            $mkts->{$stocks->{$i}->{market}}++;
            push @date_ids, $data->{$i}->{scan_time};
            push @int_ids, $i;

            $t = sprintf("%04d.%03d:%03d", int(abs($data->{$i}->{scan_trigger})), (abs($data->{$i}->{scan_trigger})*1000)%1000, $i);
            $trigs->{$t} = $i;

            $follow = $data->{$i}->{follow};
            $follow = 0 if ($follow && 
            		(($data->{$i}->{state} == 0) || 
            	     (($data->{$i}->{state} >= 2) && ($data->{$i}->{state} <= 6))) );
            $t = sprintf("%s:%d:%03d", $data->{$i}->{scan_type}, !$follow, $i);
            $type->{$t} = $i;
        }
    }
    else
    {
	    log_problem("get_scanpunten_ids: No selection");
    }
    my @sort;
	# 0 = default, 1 = name, 2 = markt, 3 = date, 4 = trend, 5 = trigger, 6 = action, 7 = max, 8 = dagen, 9 = juistheid 
    if ($param->{column} == 3)	# sort on date
    {
        my %seen = ();
        foreach my $item (@date_ids) {
            $seen{$item}++;
        }
        @sort = ($param->{reverse} == 0) ? (reverse sort keys %seen) : (sort keys %seen);
        foreach my $date (@sort)
   	    {
       	    foreach my $i (@int_ids)
           	{
               	next if ($date != $data->{$i}->{scan_time});
                push @ids, $i;
   	        }
       	}
    }
    elsif ($param->{column} == 4)	# sort on trend
    {
	    @sort = ($param->{reverse} == 0) ? (sort keys %$type) : (reverse sort keys %$type);
	    foreach my $i (@sort)
       	{
           	push @ids, $type->{$i};
       	}
    }
    elsif ($param->{column} == 5) 	# sort on trigger
    {
	    @sort = ($param->{reverse} == 0) ? (reverse sort keys %$trigs) : (sort keys %$trigs);
	    foreach my $i (@sort)
       	{
           	push @ids, $trigs->{$i};
       	}
    }
    elsif (($param->{column} == 7) && defined($param->{success})) 	# sort on max
    {
	    @sort = ($param->{reverse} == 0) ? (reverse sort keys %$difs) : (sort keys %$difs);
	    foreach my $i (@sort)
       	{
           	push @ids, $difs->{$i};
       	}
    }
    elsif (($param->{column} == 8) && defined($param->{success}))	# sort on dagen
    {
	    @sort = ($param->{reverse} == 0) ? (reverse sort keys %$days) : (sort keys %$days);
	   	foreach my $i (@sort)
       	{
           	push @ids, $days->{$i};
       	}
    }
    elsif ($param->{column} == 9)	# sort on juistheid
    {
	    my $num;
	    my $perc;
	    my $c;
	    my $cor;
	    foreach my $i (@int_ids)
	    {
            $num = $data->{$i}->{num_ok} + $data->{$i}->{num_nok};
    		$num = 1 if ($num == 0);
    		$perc = $data->{$i}->{num_ok} / $num * 100;

            $c = sprintf("%03d.%03d:%03d", int($perc), ($perc*1000)%1000, $i);
            $cor->{$c} = $i;
    	}
    	@sort = ($param->{reverse} == 0) ? (reverse sort keys %$cor) : (sort keys %$cor); 
    	foreach my $i (@sort)
       	{
           	push @ids, $cor->{$i};
       	}
    }
    elsif ($param->{column} == 2)	# sort on market
    {
    	@sort = ($param->{reverse} == 0) ? (sort keys %$mkts) : (reverse sort keys %$mkts); 
	   	my @name_idx = (sort keys %$names);
	    foreach my $j (@sort)
	    {
		    foreach my $i (@name_idx)
		    {
			    next if ($stocks->{$names->{$i}}->{market} ne $j);
	           	push @ids, $names->{$i};
           	}
	    }
    }
    else					# sort on name
    {
    	@sort = ($param->{reverse} == 0) ? (sort keys %$names) : (reverse sort keys %$names); 
    	foreach my $i (@sort)
       	{
           	push @ids, $names->{$i};
       	}
    }
    return @ids;
}

sub make_scanpunten_overview(@)
{
	my ($market) = @_;
	
    my $ref = "ShowScanOverview.pl?";
    $ref .= "all=1" if (defined($param->{all}));
    $ref .= "mine=1" if (defined($param->{mine}));
    $ref .= "&uitleg=" . ($param->{budy} ? '0' : '1');
    print_budy($param->{budy}, $page, $ref);

	my $no_stocks;
	$no_stocks = 1 if (!defined($stocks) && defined($param->{mine}));
    my @ids = get_scanpunten_ids();
    # make the list with symbols which had a kantelpunt
    my $favorites;
    $favorites = set_favorites() if (defined($param->{open}));

    my @stks;
    if (!defined($no_stocks))
    {
	    for (my $i = 0; $i < @ids; $i++)
   		{
       		next if (defined($param->{mine}) && defined($favorites) && (substr($favorites, @ids[$i], 1) eq "0"));
       		push @stks, @ids[$i] if (defined($stocks->{@ids[$i]}));
   		}
	}
    
    return write_scanpunten_overview(@stks) if (defined($param->{mail}));
    
    print "<small><small><br></small></small>\n";
    my $option = print_market_table();	      
    print "<br>\n";
    print_div("center");   
#    print disclaimer();
    print "<br>\n";
    
       
    if (defined($param->{recent}) && !is_new_kantelpunt(time()))
    {
        print_h1("Geen recente trend informatie beschikbaar tussen 17u30 en 18u15");
	   	print_banner_ads("main_banner", defined($param->{mine}) ? "eigen" : "info", undef, 1) if (show_adds("hoofd"));
	   	print_banner_ads("main_banner", defined($param->{mine}) ? "eigen" : "info", undef, 2) if (show_adds("hoofd"));
        my $ref = "<a href=\"ShowScanOverview.pl?open=1\">";       
        print_dual_heading(undef, "\"${ref}Klik hier</a>\" voor alle trends in aanmaak.");
        print "<br>\n";
    }
    else
    {
	    my $perc = 5;
        my $num = @stks;
        my $time = $num ? $data->{@stks[0]}->{quote_last} : $data->{1}->{quote_last};
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
        my @days = ('zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'); 
        my $upd = @days[$wday] . " " . strftime("%d-%m-%Y\n", localtime($time));
        if (defined($param->{all}) || defined($param->{mine}))
        {
            my $title;
            $title  = defined($param->{all}) ? "" : "Uw ";
            $title .= "Trends van $upd" if (defined($param->{recent}));
            $title .= "Trends in aanmaak." if (defined($param->{open}));
	    	if (defined($param->{mine}))
    		{
	    	    print_h1($title, undef, undef, "bm0");
    		}
    		else
    		{
#		    	my $img = "<img style=\"border: 0px solid ; width: 20px; height: 35px;\" src=\"http://www.kantelpunten.com/pics/icon/uitroepteken_blauw.gif\">";
#	        	print_h1($title, "$img&nbsp;&nbsp;", "&nbsp;&nbsp;$img", "bm0");
	    	    print_h1($title, undef, undef, "bm0");
        	}
	        print_dual_heading(undef, "<small>Bijgewerkt t/m $upd. Updates rond 18u15.</small>");
		   	print_banner_ads("main_banner", defined($param->{mine}) ? "eigen" : "info", 1) if (show_adds("hoofd"));
		
			if (0) {	
    	    my $ref1;
        	my $ref2;
	        $ref1 = "<a href=\"ShowScanOverview.pl?all=1\">" if (defined($param->{mine}));
    	    $ref1 = "<a href=\"ShowScanOverview.pl?mine=1\">" if (defined($param->{all}));
        	$ref2 = "<a href=\"ShowScanOverview.pl?recent=1\">" if (defined($param->{open}));
        	$ref2 = "<a href=\"ShowScanOverview.pl?open=1\">" if (defined($param->{recent}));       

	        print "<small><br>\n";
    	    print interim_heading(undef, "We tonen nu alle kantelpunten.<br>\"${ref1}Klik hier</a>\" als U uw favorieten wil zien.") if (defined($param->{all}));
        	print interim_heading(undef, "We tonen nu Uw favorieten.<br>\"${ref1}Klik hier</a>\" als U alle kantelpunten wil zien.") if (defined($param->{mine}));
	        print "<br>\n";
        	print interim_heading(undef, "We tonen de recente kantelpunten.<br>\"${ref2}Klik hier</a>\" als U de openstaande kantelpunten wil zien.") if (defined($param->{recent}));
   	 	    print interim_heading(undef, "We tonen de openstaande kantelpunten.<br>\"${ref2}Klik hier</a>\" als U de recente kantelpunten wil zien.") if (defined($param->{open}));
        	print "</small>\n";
    		}
        }
        print "<br>\n";
        my $nieuw = "";
        $nieuw = "nieuwe " if (($num > 1) || ($num == 0));
        $nieuw = "nieuw " if ($num == 1);
        $nieuw = "" if (defined($param->{open}));
        if ($num == 0)
        {
	        print "<br>\n";
            if (defined($param->{recent}))
            {
                print_dual_heading("GEEN", "<small>${nieuw}Trends in de aanmaak.</small>");
                print "<small><br></small>\n";            
		        my $ref = "<a href=\"ShowScanOverview.pl?all=1\">";       
		        print_dual_heading(undef, "\"${ref}Klik hier</a>\" voor alle trends in aanmaak.");
                print "<small><br></small>\n";            
            }
            elsif (defined($no_stocks))
            {
                print_dual_heading("U HEEFT GEEN FAVORIETEN GEDEFINIËERD");
                print "<small><br></small>\n";            
		        my $ref = "<a href=\"ShowScanOverview.pl?all=1\">";       
		        print_dual_heading(undef, "\"${ref}Klik hier</a>\" voor alle trends in aanmaak.");
		        $ref = "<a href=\"/pl/ShowMain.pl?page=20142\">";       
		        print_dual_heading(undef, "${ref}Lees hier meer over uw favoriteten.</a>");
                print "<small><br></small>\n";            
            }
            else
            {
		        print_dual_heading("ER ZIJN GEEN TRENDS.");
            }
        }
        else
        {
	        if (defined($param->{all}) || defined($param->{mine}))
	        {
		        my $trend;
		        $trend = "${num} nieuwe trends in aanmaak." if ($num > 1);
		        $trend = "${num} nieuwe trend in aanmaak." if ($num == 1);
            	print_dual_heading($num, "<small>${trend}</small>") if (0);
            	print <<EndOfText;
<span class="dark_blue"><small><small>
<br><b>
We tonen hieronder $trend<br> 
Zolang de trigger niet geraakt is, blijft de oude trend gelden.<br>
<a href="/pl/ShowKantelOverview.pl?all=1" title="Ga naar onze adviezen">Klik hier, voor onze koopadviezen.</a><br>
<br>
U kan de tabel schikken per aandeel, land, trend, datum of onze adviesjuistheid.<br>
</b></small></small></span>
EndOfText
            	print "<br>\n";
            	print <<EndOfText if (0);
<small><small><span class="dblack">
<br>
De signalen hieronder zijn onze basis.<br>
Ze moeten nog aan bijkomende voorwaarden voldoen, voor we ze aanbevelen.<br>
Dit zijn GEEN adviezen. Voor advies : zie "<a href="/pl/ShowKantelOverview.pl?all=1" title="Ga naar onze adviezen">adviezen</a>".<br>
<span class="bold red">De trend wordt pas bevestigd als de vanaf koers doorbroken wordt!</span><br>
</span></small></small>
<br>
EndOfText
        	}

        	print_table(0, undef, 0, 0, 0, undef, "100%");
			             
            print "<tr>\n";
 
            my $sep_width = 25;
        	my $width = 100 - ($sep_width * 2);
        	my $n_trend = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; # "Trend";
        	my $n_juistheid = "juist%";

                   
            # left buttons
       	    print " <td width=\"$sep_width%\" valign=\"top\" align=\"center\">\n";
           	print_div("center");   
           	print "&nbsp;\n";
            print_div("end");
   	        print " </td>\n";

            my @class;
            my @ind;
            my @ref;
            my $refend = $param->{sort} ? "</a>" : "";
            my $ref = "<a href=\"ShowScanOverview.pl?";
            $ref .= "all=1" if (defined($param->{all}));
            $ref .= "mine=1" if (defined($param->{mine}));
            $ref .= "recent=1" if (defined($param->{recent}));
            $ref .= "open=1" if (defined($param->{open}));
            for (my $i = 1; $i <= MAX_COLUMN; $i++)
            {
	            if ($param->{sort})
	            {
		            @ref[$i]   = ($param->{column} == $i) ? ("$ref&reverse=" . (($param->{reverse} == 0) ? "1" : "0") . "&column=$i\">") :
		            								  ("$ref&reverse=$param->{reverse}&column=$i\">");
	    	        @class[$i] = ($param->{column} == $i) ? "dkantel" : "kantel";
	        	    @ind[$i]   = ($param->{column} == $i) ? (($param->{reverse} == 0) ? "v" : "^"): "&nbsp;&nbsp;";
	       		}
	       		else
	       		{
		       		@ref[$i] = "";
		       		@class[$i] = "kantel";
		       		@ind[$i] = "&nbsp;&nbsp;";
	       		}
        	}
        	
            # center scansignalen
	        my $slot = ((is_weekend() || is_before_stock_hours() || is_after_stock_hours())) ? 1 : 0;
            print " <td width=\"$width%\">\n";
 
            print_div("center");
            print_table(0, undef, 0, 0, 0, undef, "100%", "center", "font-size: 13px;");
            print "<tr class=\"f13\">\n";
#            print " <th class=\"kantel\"></th>";		# voor de kantel pijl
            print " <th class=\"@class[9]\">&nbsp;&nbsp;</th>";     # voor de pie
            print " <th class=\"@class[1]\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ind[1]@ref[1]Aandeel$refend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>";
            print " <th class=\"kantel\"></th>";		# voor de news flash
            print " <th class=\"@class[2]\">@ind[2]@ref[2]Markt$refend&nbsp;&nbsp;</th>";
            print " <th class=\"@class[3]\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ind[3]@ref[3]Datum$refend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>" if (defined($param->{all}) || defined($param->{mine}));
            print " <th class=\"kantel\">&nbsp;Slot&nbsp;</th>" if ($slot);
            print " <th class=\"@class[4] right\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ind[4]@ref[4]Vanaf$refend</th>";
            print " <th class=\"kantel\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>";
            print " <th class=\"@class[6]\">&nbsp;&nbsp;&nbsp;&nbsp;@ind[6]@ref[6]Action$refend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>" if (defined($param->{trigger}));
            print " <th class=\"@class[7]\">@ind[7]@ref[7]Max%$refend&nbsp;&nbsp;</th>" if (defined($param->{success}));
            print " <th class=\"@class[8]\">@ind[8]@ref[8]Dagen#$refend&nbsp;&nbsp;</th>" if (defined($param->{success}));
	        my $colspan = 0;
	        $colspan++ if (defined($param->{open}) && defined($favorites));
            print " <th class=\"@class[9]\">&nbsp;&nbsp;</th>" if ($colspan);
            print "</tr>\n";
        	print "<tr><td>&nbsp;</td></tr>\n";
            my $stk;
            my $num = 1;
            foreach $stk (@stks)
            {
                print_short_scanpunt($stk, $num, $slot, $favorites);
                $num++;
            }
            print_table(0, "end");
            print_div("end");
            
            print " </td>\n";  
        
            # right buttons
       	    print " <td width=\"$sep_width%\" valign=\"top\" align=\"center\">\n";
           	print_div("center");   
           	print "&nbsp;\n";
            print_div("end");
   	        print " </td>\n";
            print_table(0, "end");

            print <<EndOfText if (0 && defined($param->{regi}));
<div align="center">
<table>
<td><span class="red"><small><small><b>&quot;</b></small></small></span></td>
<td><span class="red"><a class="u"></a></td>
<td><span class="red"><small><small><b>&quot;</b></small></small></span></td>
<td><span class="red">&nbsp;<small><small><b>&quot;</b></small></small></span></td>
<td><span class="red"><a class="d"></a></td>
<td><span class="red"><small><small><b>&quot;</b></small></small></span></td>
<td><span class="red"><small><small class="l_red"><b> : Signalen die voldoen aan de adviesvoorwaarden. Zie "<a href="/pl/ShowKantelOverview.pl?all=1" title="Ga naar onze adviezen">adviezen</a>"</b></small></small></span></td>
</table>
</div>
EndOfText
            
            if (!$param->{rb} &&
            	( ($page == 9987) || ($page == 9989) ) )
            {
	            my $type = ($page == 9987) ? "success" : "all";
	            print "<small><br></small>\n";
	            print "<a href=\"ShowScanOverview.pl?type=$type&mail\">\n";
	            print "<img align=\"middle\" style=\"border: 0px solid ; width: 32px; height: 32px;\" alt=\"\"\n";
	            print "     title=\"Stuur deze pagina naar een kennis\"\n";
	            print "     src=\"http://www.kantelpunten.com/pics/icon/mail.gif\">Doorsturen</a>\n";
	            print "<small><br></small>\n";
        	}
        	
        	print_banner_ads("scan_onder", defined($param->{mine}) ? "eigen" : "info", 1, 1) if (show_adds("hoofd"));
        	print_banner_ads("scan_onder", defined($param->{mine}) ? "eigen" : "info") if (show_adds("hoofd"));
        	
            print "<small><br>\n";
#            print "<span><small><br><b>Kantelpunten kunnen nuttig zijn als reservesignalen.</b><br>\n";
#			print "- Als men kantelpunt of stoploss liet voorbijgaan,<br>\n"; 
#			print "- een deel van een verlieslatende positie wil verkopen,<br>\n"; 
#			print "- een deel winst wil verzilveren, - wilt bijkopen.<br><br></small></span>\n"; 

#            print_dual_heading(undef, "Door te klikken op de:");
#            print_dual_heading(undef, "<u>naam/pijl</u> komt men bij het aandeeloverzicht.");
#            print_dual_heading(undef, "<u>juist%</u> ziet men alle gevolgde kantelpunten van de laatste 2 jaar.");
#            print_dual_heading(undef, "- hieronder zoeken naar artikelen/adviezen over het aandeel.");
#            print "<br><br>\n";
#            print_dual_heading(undef, "Zoektip: copieer achter Uw aandeel het volgende:</span>");
#            print_dual_heading(undef, "<span style=\"font-style: italic;\">koers OR slot OR volume OR aandeel OR beurs OR winst OR verlies OR persbericht OR</span>", "dark_red");
            print "</small>\n";
#            print_google_search("kantelpunten");
            
        }
    }
    print "<br>\n";
#    print interim_heading(undef, "Voor verdere uitleg verwijzen we u graag");
#    print interim_heading(undef, "naar de informatie-pagina's aan de linkerkant.");
#    print "<br>\n";

    print_voet();
    print_ads("yahoo_klein");    
    print_empty_lines(1, 0);
    print_div("end");
}

sub print_market_table()
{
	my $market = set_market();
	return 0 if (!defined($market));
	return 0 if (defined($param->{mine}));

	my $iref;
	my $tref;
    my $ref = "ShowScanOverview.pl?";
    $iref = $ref;
    $iref .= "column=$param->{column}&reverse=$param->{reverse}" if ($param->{sort});
    # option table
    print_div("right");   
    print_table(0, undef, 0, 0, 0, undef, "", "right", "font-size: 11px;");
    print "<tr>\n";
    
    $tref = $iref;
    $tref .= "&market=" . ($market | make_market("aex", "amx", "overig")) if (!is_nl_enabled($market));
    $tref .= "&market=" . ($market & make_market("bel20", "bel")) if (is_nl_enabled($market));
    print "<td>\n";
    print_midi_button($tref, is_nl_enabled($market) ? "nl" : "no_nl");
    print "</td>\n";
    print "<td>&nbsp;&nbsp;</td>\n";

    $tref = $iref;
    $tref .= "&market=" . ($market | make_market ("bel20", "bel")) if (!is_be_enabled($market));
    $tref .= "&market=" . ($market & make_market ("aex", "amx", "overig")) if (is_be_enabled($market));
    print "<td>\n";
    print_midi_button($tref, is_be_enabled($market) ? "be" : "no_be");
	print "</td>\n";
        
	my $extra;
	if (show_adds("scan"))
	{
	    print "<td>&nbsp;&nbsp;</td>\n";
		print "<td><div>\n";
		print_banner_ads("scan_boven", defined($param->{mine}) ? "eigen" : "info");
		print "</div></td>\n";
	    $extra = "<br>\n";
	}    

   	print "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
    print "</tr>\n";
    print_table(0, "end");
    print_div("end");
    print $extra if (defined($extra));
    
    return 1;
}	

sub print_short_scanpunt(@)
{
    my ($id, $num, $slot, $favorites) = @_;
    $slot = 0 unless defined($slot);
    my $stock = $stocks->{$id}->{stock};
    my $txt = make_smart_scan_img($stock, $data->{$id}, 'ref', undef, 'text');
    my $img;
	my $class = (($num % 2) == 0) ? "even" : "odd";
	my $text;

    $text  = "<tr>";

    if (($param->{column} == 3) && defined($cur_kdate) && ($data->{$id}->{scan_time} != $cur_kdate))
    {
	    $text .= "<tr class=\"even\"><td>&nbsp;</td></tr>\n";
    }
    $cur_kdate = $data->{$id}->{scan_time};
	    
    my $ref =  "/pl/ShowStock.pl?stock=$stock";
    my $days = int(($data->{$id}->{max_date}-$data->{$id}->{bought_on})/(24*3600));
    $days++;
    $days = 0 if ($days < 0);

    if (0) # geen kantelpijl
    {       
    if (defined($param->{regi}))
    {
    	$img = make_smart_scan_img($stock, $data->{$id}, 'ref', undef, 'kantel');
    	$img = "&nbsp;" unless defined($img);
 	    $text .= "<td class=\"$class\">$img</td>";
    }
    else
    {
	    $text .= "<td class=\"$class\"></td>";
	}
	}
    $img = make_midi_pie_img($stock, $stocks->{$id}->{cur_idx}, $data->{$id}, 'ref');
    $img = "&nbsp;" unless defined($img);
    $text .= "<td class=\"$class\">$img</td>";
    my $add = ""; # " onMouseOver=\"RenderMenu(event,'$stocks->{$id}->{stock}','$stocks->{$id}->{index_name}')\" onMouseOut=\"HideMenu(event,'bb_menu')\"";
    $text .= "<td class=\"${class}l\">&nbsp;<a href=\"$ref\"$add>" . $stocks->{$id}->{index_name} . "</a></td>";
    if (is_news_flash($data->{$id}->{last_news}))
    {
 	    $text .= "<td class=\"$class\"><a class=\"news\" title=\"Er was nieuws afgelopen 2 beursdagen!\" href=\"/pl/ShowNews.pl?stock=$stock\"></a></td>";
    }
    else
    {
	    $text .= "<td class=\"$class\"></td>";
    }
    $text .= "<td class=\"$class\">" . make_mini_mkt_img($stocks->{$id}->{mkt_bit}, 1) . "</td>";
    $text .= "<td class=\"${class}r\">" . strftime("%a %d-%m-%Y", localtime($data->{$id}->{scan_time})) . "&nbsp;</td>" if (defined($param->{all}) || defined($param->{mine}));
    $text .= "<td class=\"${class}r\">" . sprintf("%.2f", $data->{$id}->{close}) . "&nbsp;</td>" if ($slot);
    $text .= "<td class=\"${class}r\">$txt vanaf</td>";
	if (defined($param->{kantelpunt}))
	{
    	$text .= "<td class=\"${class}l\">&nbsp;" . sprintf("%.2f", $data->{$id}->{scan_trigger}) . "&nbsp;</td>";
	}
	else
	{
		my $nreg_ref = "<a href=\"/pl/ShowMain.pl?page=10027\" rel=\"nofollow\" title=\"Geregistreerde gebruikers zien ook de triggers!\">";    
	    $text .= "<td class=\"regi l_white\">${nreg_ref}<b>???</b></a></td>";
	}
    $text .= "<td class=\"$class\">" . strftime("%d-%m-%Y", localtime($data->{$id}->{bought_on})) . "</td>" if (defined($param->{trigger}));
    $text .= "<td class=\"max\">" . (($data->{$id}->{max_dif} != 0.0) ? sprintf("+%.2f%", abs($data->{$id}->{max_dif})) : "&nbsp;") . "</td>" if (defined($param->{success}));
    $text .= "<td class=\"max\">" . (($days != 0) ? $days : "zelfde") . "</td>" if (defined($param->{success}));

    if (defined($favorites))
    {
		if (substr($favorites, $id, 1) eq "0")
		{
			$text .= "<td class=\"$class\"><a class=\"mfav_add\" rel=\"nofollow\" href=\"/pl/ShowFavorites.pl?action=add&stock=$stock\" title=\"Voeg $stocks->{$id}->{index_name} toe aan mijn favorieten\">&nbsp;</a></td>";
		}
		else
		{
			$text .= "<td class=\"$class\"><a class=\"mfav_del\" rel=\"nofollow\" href=\"/pl/ShowFavorites.pl?action=remove&stock=$stock\" title=\"Verwijder $stocks->{$id}->{index_name} van mijn favorieten\">&nbsp;</a></td>";
		}
    }
    $text .= "</tr>\n";

    print $text;
}

sub write_scanpunten_overview(@)
{
	my $winst = ($page == 9987) ? 1 : 0;
	
    my $num = @_;
    my $time = $num ? $data->{@_[0]}->{quote_last} : $data->{1}->{quote_last};
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
    my @days = ('zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'); 
    my $upd = @days[$wday] . " " . strftime("%d-%m-%Y\n", localtime($time));
    my $img = "<img style=\"border: 0px solid ; width: 20px; height: 35px;\" src=\"http://www.kantelpunten.com/pics/icon/uitroepteken.gif\">";
	my $text;
    my $head = $winst ? "<i>Winstpakkers</i>&nbsp;$img" : "Alle Kantelpunten van $upd";
	
	$text = <<EndOfText;
<body style="background-color: rgb(255, 204, 153);"
      alink="#000000" link="#000000" vlink="#000000">
<div style="text-align: center;">
<span style="color: rgb(0, 0, 153); font-family: verdana;">
 <small style="font-weight: bold;"><big><big><big>$head<br></big></big></big>
 </small>
</span>
<br>
EndOfText
	print TXT $text;

	if ($winst)
	{
		$text = <<EndOfText;
<table  border="0" cellpadding="0" cellspacing="0" width="100%" align="center" style="font-size: 15px;">
 <tbody>
<tr style="font-family: trebuchet ms;">
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aandeel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 </th>
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;&nbsp;&nbsp;&nbsp;Trend&nbsp;&nbsp;&nbsp;&nbsp;
 </th>
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;&nbsp;Max%&nbsp;&nbsp;
 </th>
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;Dagen#&nbsp;
 </th>
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;juist%&nbsp;
 </th>
</tr>
EndOfText
	}
	else
	{
		$text = <<EndOfText;
<table  border="0" cellpadding="0" cellspacing="0" width="100%" align="center" style="font-size: 15px;">
 <tbody>
<tr style="font-family: trebuchet ms;">
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aandeel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 </th>
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Datum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 </th>
 <th style="text-align: center; background-color: rgb(255, 187, 119);" valign="middle">
  &nbsp;&nbsp;&nbsp;&nbsp;Trend&nbsp;&nbsp;&nbsp;&nbsp;
 </th>
</tr>
EndOfText
	}

	print TXT $text;
		
    my $stk;
    my $num = 0;
    foreach $stk (@_)
    {
		write_short_scanpunt($stk, $winst, (($num % 2) ? "light_kantel" : undef));
        $num++;
        last if ($winst && $num >= 10);
    }
	$text = <<EndOfText;
 </tbody>
</table>
<br>
Meer informatie bezoek dan <a href="http://www.kantelpunten.com/pl/Redirect.pl?page=$page">deze</a> pagina<br>
<br>
</body>
</div>
EndOfText
	print TXT $text;
}   

sub write_short_scanpunt(@)
{
    my ($id, $winst, $bcolor) = @_;
    my $stock = $stocks->{$id}->{stock};
    my $ref_id = sprintf("%03d", $id); 
    my $ref =  "http://www.kantelpunten.com/pl/Redirect.pl?page";
    my $dif = ($data->{$id}->{max_dif} != 0.0) ? sprintf("+%.2f%", abs($data->{$id}->{max_dif})) : "&nbsp;";
    my $num = $data->{$id}->{num_ok} + $data->{$id}->{num_nok};
    $num = 1 if ($num == 0);
    my $perc = sprintf("%.1f%", $data->{$id}->{num_ok} / $num * 100);
    my $days = int(($data->{$id}->{max_date}-$data->{$id}->{bought_on})/(24*3600));
    my $date = strftime("%a %d-%m-%Y\n", localtime($data->{$id}->{scan_time}));
    $days++;
    $days = 0 if ($days < 0);
    my $text;
    $bcolor = defined($bcolor) ? " background-color: rgb(255, 216, 176);" : " background-color: rgb(255, 204, 153);";
    my $img = make_kantel_img($stock, $stocks->{$id}->{cur_idx}, $data->{$id}, undef, 'info', 'always');
        $img = "&nbsp;" unless defined($img);
    
    if ($winst)
    {
    	$text = <<EndOfText;
<tr style="font-family: trebuchet ms;">
 <td style="text-align: center;$bcolor" valign="middle">
  <a href="$ref=$id">$stocks->{$id}->{index_name}</a>
 </td>
 <td style="text-align: center;$bcolor" valign="middle">
  <a href="$ref=45$ref_id">$img</a>
 </td>
 <td style="text-align: center; background-color: rgb(0, 255, 0);" valign="middle">
  $dif
 </td>
 <td style="text-align: center;$bcolor" valign="middle">
  $days
 </td>
 <td style="text-align: center;$bcolor" valign="middle">
  <a href="$ref=47$ref_id">$perc</a>
 </td>
</tr>
EndOfText
	}
	else
	{
    	$text = <<EndOfText;
<tr style="font-family: trebuchet ms;">
 <td style="text-align: center;$bcolor" valign="middle">
  <a href="$ref=$id">$stocks->{$id}->{index_name}</a>
 </td>
 <td style="text-align: center;$bcolor" valign="middle">
  $date
 </td>
 <td style="text-align: center;$bcolor" valign="middle">
  <a href="$ref=47$ref_id">$img</a>
 </td>
</tr>
EndOfText
	}
	print TXT $text;
}
 
sub make_script()
{
	my $add_script = <<EndOfText;
	function RenderMenu(e, stock, label)
	{
		document.getElementById("bb_label").innerHTML = label;
		document.getElementById("bb_label").setAttribute("url", "/pl/ShowStock.pl?stock=" + stock);
		document.getElementById("bb_graph").setAttribute("src", "http://www.kantelpunten.com/php/ShowKantel.php?type=sbb&stock=" + stock);
		document.getElementById("bb_graph").setAttribute("url", "/pl/ShowStock.pl?stock=" + stock);
		document.getElementById("bb_chart").setAttribute("src", "http://www.kantelpunten.com/php/ShowChart.php?type=sweek&stock=" + stock);
		document.getElementById("bb_chart").setAttribute("url", "/pl/ShowStock.pl?stock=" + stock);
	
		ShowMenuDelayed(e, "bb_menu");
	}
EndOfText

    my $script = make_menu_script($add_script, "x + 5");
	return $script;
}

	