/***
* Výňatek z knihy "HTML5 a CSS3", vydal Computer Press.
* Autorská práva ke kódu. Nesmí se použít jako materiály k výuce, 
* v kurzech, knihách, článcích a podobně. V případě dotazů nás kontaktujte.
* Ručíme, že kódy ke knize odpovídají svému účelu. 
* Více informací o knize najdete na http://knihy.cpress.cz/k1948.
***/

// databázový odkaz
var db = null;

// vytvoří připojení k lokální databázi
pripojitkDB = function()
{
  db = window.openDatabase('poznamky_awesomeco' , '1.0' ,
  'Databáze Poznámky AwesomeCo' , 1024*1024*3);
};

// metoda pro tvorbu tabulky
vytvorTabulkuPoznamky = function()
{
  db.transaction(function(tx){
    tx.executeSql(
      "CREATE TABLE poznamky (id INTEGER \
       PRIMARY KEY, nazev TEXT, poznamka TEXT)", [],
      function(){ alert('Tabulka Poznamky byla úspěšně vytvořena!' ); },
      function(tx, chyba){ alert(chyba.message); } );
  });
};

// načte všechny záznamy z tabulky v databázi
nacistPoznamky = function(){
  db.transaction(function(tx) {
    tx.executeSql('SELECT id, nazev, poznamka FROM poznamky' , [],
      function(SQLTransaction, data){
        for (var i = 0; i < data.rows.length; ++i) {
          var radek = data.rows.item(i);
          var id = radek['id'];
          var nazev = radek['nazev'];
          
          pridatPoznamkuDoSeznamu (id, nazev);
        }
      });
  });
};

// přidá položku seznamu do seznamu poznámek, 
// a to podle daného ID a názvu
pridatPoznamkuDoSeznamu = function(id, nazev){
  var poznamky = $("#poznamky" );
  var polozka = $("<li>" );
  polozka.attr("data-id" , id);
  polozka.html(nazev);
  poznamky.append(polozka);
};



// vloží záznam do tabulky
vlozPoznamku = function(nazev, poznamka)
{
  db.transaction(function(tx){
    tx.executeSql("INSERT INTO poznamky (nazev, poznamka) VALUES (?, ?)" ,
                   [nazev.val(), poznamka.val()],
      function(tx, vysledek){
        var id = vysledek.insertId ;
        alert('Záznam ' + id + ' uložen!' );
        nazev.attr("data-id" , vysledek.insertId );
        pridatPoznamkuDoSeznamu (id, nazev.val());
        $("#tlac_smazat" ).show();
      },
      function(){
        alert('Poznámku nelze smazat.' );
      }
    );
  });
};


/* Aktualizuje zýhnam v tabulce. Bere pole Název a Poznámka, které jsou obě objekty jQuery. ID k aktualizaci je vlastní datový atribut pole s názvem.
*/
aktualizovatPoznamku = function(nazev, poznamka)
{
  var id = nazev.attr("data-id" );
  db.transaction(function(tx){
    tx.executeSql("UPDATE poznamky set nazev = ?, poznamka = ? where id = ?" , 
	[nazev.val(), poznamka.val(), id],
      function(tx, vysledek){
        alert('Záznam ' + id + ' byl aktualizován!' );
        $("#poznamky>li[data-id=" + id + "]" ).html(nazev.val());
      },
      function(){
        alert('Poznámka nebyla aktualizována!' );
      }
    );
  });
};

// odstraní záznam z tabulky
smazatPoznamku = function(nazev)
{
  var id = nazev.attr("data-id" );
  db.transaction(function(tx){
    tx.executeSql("DELETE from poznamky where id = ?" , [id],
      function(tx, vysledek){
        alert('Záznam ' + id + ' byl smazán!' );
        $("#poznamky>li[data-id=" + id + "]" ).remove();
      },
      function(){
        alert('Poznámka nebyla smazána!' );
      }
    );
  });
};




// nahraje poznámku z tabulky poznámek pomocí jejího ID
nahratPoznamku = function(id){
  db.transaction(function(tx) {
    tx.executeSql('SELECT id, nazev, poznamka FROM poznamky where id = ?' , [id],
      function(SQLTransaction, data){
        var radek = data.rows.item(0);
        var nazev = $("#nazev" );
        var poznamka = $("#poznamka" );
        
        nazev.val(radek["nazev"]);
        nazev.attr("data-id", radek["id"]);
        poznamka.val(radek["poznamka"]);
        $("#tlac_smazat" ).show();
      });
  });
}


// Vymaže formulář a odsztraní tlačítko "Smazat" 
novaPoznamka = function(){
  $("#tlac_smazat" ).hide();
  var nazev = $("#nazev" );
  nazev.removeAttr("data-id" );
  nazev.val("" );
  var poznamka = $("#poznamka" );
  poznamka.val("" );
}


$(function(){
  pripojitkDB();
  vytvorTabulkuPoznamky();
  nacistPoznamky();

  
	$("#tlac_ulozit" ).click(function(udalost){
	  udalost.preventDefault();
	  var nazev = $("#nazev" );
	  var poznamka = $("#poznamka" );
	
	  if(nazev.attr("data-id" )){
		aktualizovatPoznamku(nazev, poznamka);
	  }else{
		vlozPoznamku(nazev, poznamka);
	  }
	});

  
	$("#tlac_smazat" ).click(function(udalost){
	  udalost.preventDefault();
	  var nazev = $("#nazev" );
	  smazatPoznamku(nazev);
	});
  
  $("#poznamky" ).click(function(udalost){
    if ($(udalost.target).is('li' )) {
      var element = $(udalost.target);
      nahratPoznamku(element.attr("data-id" ));
    }
  });

  
	$("#tlac_nova" ).click(function(event){
		event.preventDefault();
		novaPoznamka ();
	  });
	  
	  novaPoznamka();
  
});

