/**
 * Copyright 2003-2004 (C) Massvision \n
 * Definicija scripta za rad sa tajmerom
 * @file    DisplayTimer.js
 * @author  Nemanja Nikolic
 * @brief   Definicija scripta za rad sa tajmerom
 * @endcode
 */

/**
 * Kreira objekat tipa timerManager
 * @brief Kreira objekat tipa timerManager
 * @param params parametri poziva:
 * @code
   var params = { dd           : 20        // dani
                 ,h            : 14        // sati
                 ,m            : 12        // minuti
                 ,s            : 23        // sekunde
                 ,direction    : -1        // "smer" brojanja
                 ,id_prefix    : 'span_'   // prefix u id-u span-a (div-a) koji sadrzi element (tipa "counter_element" ...(yy|mm|dd...) )
                 ,usesImages   : 1         // da li koristi slike
                 ,imagePath    : 'path'    // putanja do direktorijuma sa slikama
                 ,imagePrefix  : 'prefix_' // prefix u imenu slika
                 ,countHTML    : '<p>...'  // kod koji se prikazuje ako je odbrojavanje nije zavrseno
                 ,countOverHTML: '<p>...'  // kod koji se prikazuje ako je odbrojavanje zavrseno
                 ,selfVariable : 'counter' // varijabla pod kojom je inicijalizovan counter
                }
 * @endcode
 */
function timerManager(params)
{
   this.dd = params.dd  // dani
   this.h  = params.h   // sati
   this.m  = params.m   // minuti
   this.s  = params.s   // sekunde

   this.notOver = 1     // flag - da li je odbrojavanje zavrseno

   this.direction     = params.direction     // +/-1 rastuci/opadajuci
   this.id_prefix     = params.id_prefix     // id elemenata u dokumentu

   // da li koristi slike:
   this.usesImages    = params.usesImages
   this.imagePath     = params.imagePath     // path do direktorijuma sa slikama
   this.imagePrefix   = params.imagePrefix   // prefix u imenu slike ("tipa counter_img_XXX")
   this.countHTML     = params.countHTML     // kod koji se prikazuje ako odbrojavanje nije zavrseno
   this.countOverHTML = params.countOverHTML // kod koji se prikazuje ako je odbrojavanje zavrseno

   this.selfVariable  = params.selfVariable  // varijabla pod kojom je inicijalizovan counter
   this.timer         = 0                    // tajmer
}

/**
 * Inicijalizuje counter
 * @brief Inicijalizuje counter
 */
timerManager.prototype.init = function()
{
   if (   this.dd>0
       || this.h>0
       || this.m>0
       || this.s>0
      )
      this.setNotOver()
   else
      this.setOver()

   this.count()
}

/**
 * Setuje u "not over" stanje (prikazuje odgovarajuci html)
 * @brief Setuje u "not over" stanje (prikazuje odgovarajuci html)
 */
timerManager.prototype.setNotOver = function()
{
   this.notOver = 1
   document.getElementById(this.id_prefix).innerHTML = this.countHTML

}

/**
 * Setuje u "over" stanje (prikazuje odgovarajuci html)
 * @brief Setuje u "over" stanje (prikazuje odgovarajuci html)
 */
timerManager.prototype.setOver = function()
{
   this.notOver = 0
   document.getElementById(this.id_prefix).innerHTML = this.countOverHTML
}

/**
 * Prikazuje vreme
 * @brief Prikazuje vreme
 */
timerManager.prototype.displayCurrentTime = function()
{
   if (this.notOver)
   {  // odbrojavanje nije gotovo
      if (this.usesImages)
      {
         // TODO: slicice
      }
      else
      {
         if (this.dd>-1)
            document.getElementById(this.id_prefix+'dd').innerHTML = this.dd
         if (this.h>-1)
         {
            var htext = this.h.toString().length <2 ? '0' : ''  // dodaj '0' ako je jednocifreno
            htext += this.h
            document.getElementById(this.id_prefix+'h').innerHTML = htext
         }
         if (this.m>-1)
         {
            var mtext = this.m.toString().length <2 ? '0' : ''  // dodaj '0' ako je jednocifreno
            mtext += this.m
            document.getElementById(this.id_prefix+'m').innerHTML = mtext
         }
         if (this.s>-1)
         {
            var stext = this.s.toString().length <2 ? '0' : ''  // dodaj '0' ako je jednocifreno
            stext += this.s
            document.getElementById(this.id_prefix+'s').innerHTML = stext
         }
      }
   }
   else
   {  // count over
      // do nothing...
   }
}

/**
 * Odbrojava
 * @brief Odbrojava
 */
timerManager.prototype.count = function()
{
   if (this.notOver)
   {
      if (this.direction==1)
      {
         //TODO: brojanje unapred
      }
      else
      {
         if (--this.s < 0)
         {
            this.s = 59
            this.notOver = 0  // pretpostavimo da je gotovo, i "cekamo demanti"
            if (this.m > -1) // isset
            {
               if (--this.m < 0)
               {
                  this.m = 59
                  if (this.h > -1) // isset
                  {
                     if (--this.h < 0)
                     {
                        this.h = 23
                        if (this.dd > -1) // isset
                        {
                           if (--this.dd < 0)
                           {
                              // finito!
                           }
                           else
                           {
                              this.notOver = 1
                           }
                        }
                     }
                     else
                     {
                        this.notOver = 1
                     }
                  }
               }
               else
               {
                  this.notOver = 1
               }
            }
         }
         else
         {
            this.notOver = 1
         }
      }

      if (!this.notOver) // gotovo - prikazi drugi html
         this.setOver()

      this.displayCurrentTime()
      this.timer = setTimeout(this.selfVariable+".count()",1000)
   }
}
