/*global window, document, alert, Image, Consola, strfix  */

cmd_commands = {
   'help': {
      'help': 'Nápověda',
      'longhelp': 'Nápověda\n' +
                  'HELP (<i>prikaz</i>|commands)\n' +
                  '<i>prikaz</i>    Nápověda k příkazu\n' +
                  '-commands  Vypsat všechny příkazy',
      'params':
      {
         'commands':true
      },
      'exec': function (n, that)
      {
         var arr_txt, k;
         if (n.length > 0)
         {
            if (n[0] === '-commands')
            {
               arr_txt = [];
               for (k in that.commands)
               {
                  if (that.commands[k].help)
                  {  
                     arr_txt.push(strfix(k.toUpperCase()) + ' - ' + that.commands[k].help);
                  }
               }
               arr_txt.sort();
               
               return arr_txt.join("\n");
            }
            else if (that.commands[n[0].toLowerCase()])
            {
               if (that.commands[n[0].toLowerCase()].longhelp)
               {
                  return that.commands[n[0].toLowerCase()].longhelp;
               }
               else
               {
                  return 'K tomuto příkazu není dostupná nápověda';
               }
            }
            else
            {
               return 'Zadaný příkaz neexistuje';
            }
         }
         else
         {
            return that.commands['help'].longhelp;
         }
      }
   },
      
   'cls': {
      'help': 'Vymaže obrazovku',
      'longhelp': 'Vymaže obsah konzole',
      'exec': function (n, that)
      {
         that._stdout = [];
         that._stdout_classname = [];
         return false;
      }
   },
   
   'file': {
      'help': 'Upload/download souboru [WIP]',
      'longhelp': 'Odešle soubor do odkládacího veřejně nepřístupného adresáře\n' +
                  'Pro stažení bude potřeba zadat vygenerovaný identifikátor (heslo)\n' +
                  'Ve vystavbě, bude použita swfupload.org',
      'exec': function (n, that)
      {
         return false;
      }
   },   
   
   'todo': {
      'help': 'To-do list [WIP]',
      'longhelp': 'Zobrazí/přidá položku do todo listu\n' +
                  'Ve vystavbě',
      'exec': function (n, that)
      {
         return false;
      }
   },
      
   'reload': {
      'help': 'Znovu inicializuje konzolu',
      'longhelp': 'Znovu inicializuje konzolu',
      'exec': function (n, that)
      {
         that.con.parentNode.removeChild(that.con);
         that.con = null;
         
         that.install(that.target);
         that.open();
         $(that.cmdline).focus();
         
         return 'Hotovo';
      }
   },
   'echo': {
      'help': 'Výpis textu na obrazovku',
      'longhelp': 'Vypisuje text na obrazovku nebo zapíná/vypíná zobrazení příkazu do výstupu.\n' +
                  '&nbsp;\n' +
                  'ECHO [ON | OFF]\n' +
                  'ECHO [zprava]\n' +
                  '&nbsp;\n' +
                  'Příkaz ECHO bez parametru zobrazí aktuální nastavení zobrazování výstupu.\n',
      'exec': function (par, that)
      {
         if (par.length === 0)
         {
            return 'ECHO je ' + ((that._stdoutDisplayCmd) ? 'povolen': 'zakázán');
         }
         else if ((par.length === 1) && (par[0].toLowerCase() === "off"))
         {
            that._stdoutDisplayCmd = false;
            return false;
         }
         else if ((par.length === 1) && (par[0].toLowerCase() === "on"))
         {
            that._stdoutDisplayCmd = true;
            return false;
         }
         else
         {
            p = par.join(" ");
            for (i in that.variables)
            {
               var re = new RegExp("\%"+i+"\%", "gi")  
               p = p.replace(re, that.variables[i]);
            }  
            return p;
         }
      }
   },
      
   'close': {
      'help': 'Zavře konzoli',
      'longhelp': 'Zavreni konzole',
      'exec': function (n, that)
      {
         that.close();
         return false;
      }
   },
      
   'whois': {
      'help': 'Whois',
      'longhelp': 'Provede dotaz WHOIS na danou doménu/ip adresu\n'+
                  'WHOIS [-full] addr\n'+
                  '-full    Detailní výpis'+
                  'addr     Doména nebo IP adresa',
      'params':
      {
         'full':true
      },
      'minparam': 1,
      'exec': function (par, that)
      {
         a = new Class_Conn();
         if (par[0].toLowerCase() == '-full')
         {
            ip = par[1];
            mode = 'full';
         }
         else
         {
            ip = par[0];
            mode = 'simple';
         }
         
         a.url = 'tools/whois.php?ip=' + ip + '&mode=' + mode;
         var xt = that;
         a.whenDone = function(dat,t)
         {
            xt.print_stdout(dat.responseText);
            xt.redraw();
         };
         a.start();

         return 'Whois na:' + ip;
      }
   },
   
   'webget': {
      'help': 'Webget',
      'longhelp': 'Zobrazi cizi url\n'+
                  'WEBGET url\n'+
                  'url     url adresa',
      'params':
      {
      },
      'minparam': 1,
      'exec': function (par, that)
      {
         url = par[0];
         a = new Class_Conn();
         a.url = 'tools/webget.php?url=' + url;
         var xt = that;
         a.whenDone = function(dat,t)
         {
            xt.print_stdout(dat.responseText);
            xt.redraw();
         };
         a.start();

         return 'webget:' + url;
      }
   },
   
   'kurz': {
      'help': 'Kurz měn',
      'longhelp': 'Zobrazí aktuální kurz\n'+
                  'KURZ [mena]\n',
      'params':
      {
      },
      'minparam': 1,
      'exec': function (par, that)
      {
         mena = par[0];

         a = new Class_Conn();
         a.url = 'tools/kurz.php?mena=' + mena;
         var xt = that;
         a.whenDone = function(dat,t)
         {
            xt.print_stdout(dat.responseText);
            xt.redraw();
         };
         a.start();

         return 'mena:' + mena;
      }
   },
      
   'sample': {
      'help': 'Demo:Výpis parametru',
      'minparam': 1,
      'exec': function (par)
      {
         return 'Zadal jsi parametry:' + par.join(",");
      }
   },
      
   'sum': {
      'help': 'Součet čísel',
      'longhelp': 'Suma čísel\n' +
         'SUM <i>(cislo)</i> <i>(cislo)</i> <i>(cislo)</i>\n' +
         'cislo   Čísla k sečteni (tečka jako oddělovač desetinných míst)',
      'minparam': 1,
      'exec': function (par)
      {
         var i = 0, vysledek = 0;
         for (i = 0; i < par.length; i++)
         {
            vysledek = (vysledek * 1) + (par[i] * 1);
         }  
         return 'Celkem:' + vysledek;
      }
   },
   'set': {
      'help': 'Nastavuje atributy',
      'longhelp': 'Nastavení atributů\n' +
                  'SET nazev <i>(hodnota)</i>\n' +
                  'nazev    Název atributu\n' +
                  strfix('') + 'Je li zadán jen název, je hodnota čtena\n' +
                  'hodnota  Hodnota pro zápis',
      'minparam': 1,
      'exec': function (par, consola)
      {
         var i = 0, vysledek = '', msg, pars;
         try
         {
            if (!eval('' + par[0]))
            {
               return 'neplatny parametr';
            }
         }
         catch (err)
         {
            return 'neplatny parametr';
         }
         
         if (!par[1]) // get
         {
            return 'Parametr <b>' + par[0] + '</b> je nastaven na <b>' + eval('' + par[0]) + '</b>';
         }
         else // set
         {
            pars = [];
      
            if (par.length > 1)
            {
               for (i = 1; i < par.length; i++)
               {
                  pars.push(par[i]);
               }
               pars = pars.join(" ");
            }
         
            try
            {
               eval('' + par[0] + '="' + pars + '";');
               msg = 'Parametr <b>' + par[0] + '</b> byl nastaven na <b>' + eval('' + par[0]) + '</b>';
            }
            catch (err_set)
            {
               msg = 'chyba:' + err_set;
            }
            
            return msg;
         }
      }
   },
   
   'garfield': {
      'help': 'Komix garfield',
      'longhelp': 'Komix garfield\n' +
                  'GARFIELD 26.05.2008 30.01.2008 09.04.2009\n' +
                 strfix('', 12)           + 'bez parametrů zobrazí dnešní komix\n' +
                 strfix('26.05.2008', 12) + 'zobrazí komix ze zadaného data, více dat odděl mezerou',
      'minparam': 0,
      'exec': function (par)
      {
         this.par = par;
         this.ret_img = function(y, m, d)
         {
            url = "http://images.ucomics.com/comics/ga/" + y + "/ga" + y.substring(2) + "" + m + "" + d + ".gif";
            return '<img src="' + url + '">\n';
         }
         this.valid_date = function (txt_date)
         {
            var a, dt, bdt, dc, objRegExp, y, m, d, prvniRok, prvniMesic, prvniDen;
            
            prvniRok    = 1978;
            prvniMesic  = 6;
            prvniDen    = 19;
            
            if (!txt_date)
            {
               return false;
            }
            
            a = txt_date.split('.');
            dt = new Date(a[2], a[1] - 1, a[0], 7); // v 7 hodin toho dne
            bdt = new Date(prvniRok, prvniMesic - 1, prvniDen, 7);
            dc = new Date();
            
            y = a[2];
            m = a[1];
            d = a[0];
            
            /*
            var objRegExp = /^\d{1,2}(\.)\d{1,2}\1\d{4}$/
            */
            objRegExp = /[0-3][0-9]\.[0-1][0-9]\.[0-2][0-9][0-9][0-9]$/;
            if (objRegExp.test(txt_date) !== true)
            {
               return false;
            }
            
            if ((dt.getTime()) >= dc) // budoucnost
            {
               return false;
            }
         
            if (dt < bdt) // minulost komix neexistoval
            {
               return false;
            }
            
            return true;
         };
         
         this.play = function ()
         {
            var i, a, y, m, d, dt, url, img;
            if (this.par.length > 0)
            {
               img = '';
               for (i=0;i<par.length;i++)
               {
                  if (!this.valid_date(this.par[i]))
                  {
                     return 'Neplatne datum:'+this.par[i];
                  }
                  
                  a = this.par[i].split('.');
               
                  y = a[2];
                  m = a[1];
                  d = a[0];
                  img += '-----------------------\n';
                  img += this.par[i]+'\n';
                  img += this.ret_img(y, m, d); 
               }
            }
            else
            {
               dt = new Date();
               d = dt.getDate().toString();  
               m = dt.getMonth() + 1;
               y = dt.getFullYear().toString();
               
               if (m < 10)
               {
                  m = 0 + "" + m;
               }
               if (d < 10)
               {
                  d = 0 + "" + d;
               }
               img = this.ret_img(y, m, d);
            }        
            
            return img +
                   '<a href="http://www.gocomics.com/garfield/">Zdroj: GoComics, autor komiksu Jim Davis</a>';

            return img+'<a href="http://www.gocomics.com/garfield/">Zdroj: GoComics, autor komiksu Jim Davis</a>';
         };
         return this.play();
      }
   }
};
