#!/usr/bin/env python

my %FORM = &parse_form;  # input data


print "Content-type: text/html\n\n";
print qq#

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//ES"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Generador de enlaces contextuales para webmasters marca ACME</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
.palabras {width:300px;height:80px;} 
.result {width:300px;height:80px;border: 1px dotted 000099;} 
</style>
</head>
<body>
 <form class=adds method=post>
  <input type=hidden name=ok value=1>
  <h1>Generador de Enlaces Contextuales Autom&aacute;ticos para webmasters</h1>
<h2>Esta utilidad online para webmasters genera un c&oacute;digo que, colocado en tu sitio web o blog, convierte autom&aacute;ticamente las frases o palabras que elijas en enlaces a la direcci&oacute;n (web, blog, enlace de afiliado, etc) que quieras.</h2>
  Escribe las palabras o frases:<br>
(una palabra o frase por linea (m&aacute;ximo 10) y 512 caracteres)
<br/>
<textarea id=keywords name=query class=palabras>$FORM{"query"}</textarea>
<br/><br/>
URL destino: (incluyendo http://)<br>
<input id=url type=text name=url size=50 value="$FORM{url}"><br>
<input id=go type=submit value=" Generar C&oacute;digo ">
 </form>
<script type="text/javascript"><!--
google_ad_client = "pub-7526654099833599";
google_alternate_ad_url = " http://superpatanegra.com/google_adsense_script.html";
google_alternate_color = "FFFFFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0033CC";
google_color_url = "000000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
#;
if (!$FORM{ok}){
print qq#
</BODY></HTML>
#;
 exit(0);
}


if (!&check_form()){
print qq#
<div>
Parece que hay alg&uacute;n error
<br>Por favor, rev&iacute;salo.
</div>

</BODY></HTML>
#;
 exit(0);
}

print q#
 <div><h2>Resultado:</h2></div>
 <textarea id=result class=result><script type="text/javascript">
function rR(q){var _="";;for(i=1;i<(q.length+1);i++){k=q.charCodeAt(i-1);if(k>=97&&k<=109){k=k+13}else
if(k>=110&&k<=122){k=k-13}else if(k>=65&&k<=77){k=k+13}else if(k>=78&&k<=90){k=k-13} _=_+String.fromCharCode(k)}
return _}
#;

print "AdV={Y:'" .rot13($FORM{url}). "',k0:[";

my @kw = split(/\n/, $FORM{"query"});
for (my $i = 0 ;$i <= $#kw; $i++) {
  $kw[$i] = "'" .rot13($kw[$i]). "'";
}
print join(',', @kw);

print "]};";

print q#AdV.pH=function(y,_){var o=[];for(var p=0;p<_.length;p++){if(_[p]){o.push([new RegExp("\\\b("+rR(_[p])+")\\\b","gi")])}}
var q=0,r='<',t=false;var u=new RegExp('^(script|style|textarea|a)','gi');var w=null,e='';while(q>=0){var i=y.indexOf(r,q);if(i<0){w=y.substring(q);q=-1}else{w=y.substring(q,i);q=i+1}
if(r=='<'){if(!t){for(var a=0;a<o.length;a++)
w=w.replace(o[a][0],'<a href="'+rR(AdV.Y)+'" target=_blank>$1</a>')}else
t=false}else if(w.match(u)){t=true}
e+=w+(i<0?'':r);r=r=='<'?'>':'<'}
return e};AdV.pE=function(q,_){if(!_)return;q.innerHTML=AdV.pH(q.innerHTML,_)};AdV.pr=function(){var _=AdV.k0,q=null;if(_
&&(
(q=document.getElementById('content'))||
(q=document.getElementById('container'))||
(q=document.body)
)
){AdV.pE(q,_)}};if(window.onload){AdV.oo=window.onload;window.onload=function(_){AdV.oo(_);AdV.pr()}}else{window.onload=AdV.pr}
</script>
#;


print qq#
</textarea>
<h2>INSTRUCCIONES:</h2>
Simplemente copia el c&oacute;digo resultado y p&eacute;galo al final justo antes de la etiqueta &lt;/body&gt;<br/><br/>
Para insertarlo en un blog de Blogger tienes que ir a "dise&ntilde;o" => "edici&oacute;n de html" y colocar el c&oacute;digo igualmente antes de la etiqueta &lt;/body&gt;. Otra opci&oacute;n es agregar un widget HTML/Javascript en la parte inferior del dise&ntilde;o en el que se pega el c&oacute;digo y se guarda sin t&iacute;tulo alguno.<br/><br/>
Una vez insertado el c&oacute;digo que has generado cada vez que escribas las palabras o frases clave se convertir&aacute;n autom&aacute;ticamente en enlaces que apuntar&aacute;n al sitio web que hayas elegido.<br/>
Utilidad online gratuita ofrecida por <a href="http://superpatanegra.com">SuperPataNegra - Directorio de Enlaces Utiles</a>.<br/><br/><br/><br/>
</BODY></HTML>
#;


#################################################
sub parse_form {
  my $buffer = '';
  my %FORM = ();
  if ($ENV{'REQUEST_METHOD'} eq 'GET') {
    $buffer = $ENV{'QUERY_STRING'};
  }elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  }else {
    return ""; # error
  }
  $buffer =~ s/&(?!amp;)/&amp;/g; # XHTML standard
  for ( split( /&amp;/, $buffer ) ) {
   my ( $name, $value ) = split( /=/, $_, 2); # splits on the first '='
  if ( $name ) {
   for ( $name, $value ) { tr/+/ /; s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; }
   $name =~ s/<([^>]|\n)*>//g; # del tags
   $name =~ s/\|/ /g;          # del |
#   $value =~ s/&/&amp;/mg;     # repl &
#   $value =~ s/</&lt;/g;       # repl <
#   $value =~ s/>/&gt;/g;       # repl >
   $value =~ s/\r//g;          # del win end row
#   $value =~ s/\|/ /g;         # del |
   $value =~ tr/ / /s;         # repl miltiplie space
   $value =~ s/^\s+//;         # del first space
   $value =~ s/\s+$//;         # del last space
   if (defined $FORM{$name}) { 
     $FORM{$name} .= "\t$value"; 
   } else { 
     $FORM{$name} = $value; 
   }
  }  
 }
 return %FORM;
}
#################################################
sub check_form {
 my $test_kw = $FORM{"query"};
 $test_kw =~ s/[\s\t\n\r]//g;
 if (!$test_kw) {
   return 0;
 }
 if ($FORM{url} !~ m#^http://(.+)\.(.+)$#) {
   return 0;
 }
 return 1;
}
##########################
sub rot13 {
  $text = shift;
  my $rot13text_rotated = "";

for ($i = 0 ; $i < length($text); $i++) {
  $letter = substr($text,$i,1);
  $k = ord($letter);
  if ($k >= 97 && $k <= 109) {
   $k = $k + 13;
  } elsif ($k >= 110 && $k <= 122) {
   $k = $k - 13;
  } elsif ($k >= 65 && $k <= 77) {
    $k = $k + 13;
  } elsif ($k >= 78 && $k <= 90) {
    $k = $k - 13;
  }
  $rot13text_rotated .= chr($k);
}
return $rot13text_rotated;
}
