// when page is loaded 
window.onload = function()
{
    // Check if logged in by looking if Cookie "AuthSession" exists.
    if ($.cookies.get("obsono_auth") != null) {
        Obsono_Liste.toggleLoginView('hide');
        if (window.location.search == ''){
            add_key_to_window_location();    
        } //else {
            //if ($('#regalliste').length > 0) {
            //    Obsono_Liste.setRegaleListe($.cookies.get("obsono_auth"));   
            //}            
        //}
    } else {
        Obsono_Liste.toggleLoginView('show');
    }; 


    // wenn Login versucht wird
    $("#nutzerlogin").submit(function()
        {
            var login = $("#login").val();
            var pass = $("#pass").val();
            if(login && pass) { // keine leeren Listen erstellen
                Obsono_Liste.login(login, pass);
            }
            return false;
        });

    // wenn Login versucht wird
    $("#demologin").submit(function()
        {
            var login = 'demo';
            var pass = 'demo';
            if(login && pass) { // keine leeren Listen erstellen
                Obsono_Liste.login(login, pass);
            }
            return false;
        });
    
      // wenn logout versucht wird
    $("#nutzerlogout").submit(function()
        {
            Obsono_Liste.logout();             
            return false;
        });

    $("#neueliste").submit(function()
        {
            var value = $("#obsonolist").val();
            $("#obsonolist").val(""); 
            if(value) { // keine leeren Listen erstellen
                    Obsono_Liste.createNewList(value);
            }
            return false;
        });       

    $("#neuesprodukt").submit(function()
        {
            var value = $("#obsonoprodukt").val();

            if ($("#obsonoproduktregal").val()) {
                var value1 = $("#obsonoproduktregal").val();    
            } else {
                var value1 = 'Sonstige'
            }
            
            
            
            //splitData = value.split("##|##");
            //if (splitData[1]) {
            //    var value1 = splitData[1];
            //    var value = splitData[0];
            //} else {
            //    var value1 = 'Sonstige';
            //}
            
            $("#obsonoprodukt").val("");
            $("#obsonoproduktregal").val("");
            if(value) { // keine leeren Listen erstellen
                Obsono_Liste.addNewProduct({produktname: value, standort: value1, beschreibung: 'leer'});
            }            
            return false;
        });
    
    $("#listespeichern").submit(function()
        {
            Obsono_Liste.writeList();
            return false;
        });    

    $("#registrierungsformular").submit(function()
        {
            loginname = this.loginname.value;
            passwort = this.passwort.value;            
            email = this.email.value;

            vorname = this.vorname.value;
            nachname = this.nachname.value;
            hausnummer = this.hausnummer.value;
            strasse = this.strasse.value;
            plz = this.plz.value;
            ort = this.ort.value;
         
            if (loginname != '' && passwort != '' && email != '') {
                // add user to auth database
                daten = {username: loginname, password: passwort, userdb: 'obsono', email: email};                

                $.couch.addUser(daten, {
                    success: function(doc)
                    {
                        // write userdata
                        nutzerdaten = {type: 'nutzerdaten', username: loginname, email: email, vorname: vorname, nachname: nachname, hausnummer: hausnummer, strasse: strasse, plz: plz, ort: ort};
                        Obsono_Liste.die_db.saveDoc(nutzerdaten, {
                          success: function(doc) 
                          {
                            Obsono_Liste.login(loginname, passwort);                         
                          }        
                        });                            
                    },
                    error: function(data)
                    {
                        alert(data.responseText);
                    }                    
                });
                

                
            } else {
                alert('Bitte füllen Sie alle Pflichtfelder aus.');
            }

            return false;
        });
    
    // änderungen in den Nutzerdaten abspeichern
    $("#aenderungsformular").submit(function()
        {
            listid = this.listid.value;
            revid = this.revid.value;
            
            loginname = this.loginname.value;
            passwort = this.passwort.value;            
            email = this.email.value;

            vorname = this.vorname.value;
            nachname = this.nachname.value;
            hausnummer = this.hausnummer.value;
            strasse = this.strasse.value;
            plz = this.plz.value;
            ort = this.ort.value;
         
            if (loginname != '' && email != '') {
                // add user to auth database
                nutzerdaten = {type: 'nutzerdaten', username: loginname, email: email, vorname: vorname, nachname: nachname, hausnummer: hausnummer, strasse: strasse, plz: plz, ort: ort};
      
                if (listid){nutzerdaten._id = listid;}
                if (revid){nutzerdaten._rev = revid;}

                Obsono_Liste.die_db.saveDoc(nutzerdaten, {
                  success: function(doc) 
                  {
                    window.location.reload();
                  }        
                });                  
            } else {
                alert('Bitte füllen Sie alle Pflichtfelder aus.');
            }

            return false;
        });       



    // den sortierbereich initialisieren
    $(function() {
      $("#sortable").sortable({
              placeholder: 'ui-state-highlight'
      });
      $("#sortable").disableSelection();
    });
    
}


function add_key_to_window_location(){
    login = $.cookies.get("obsono_auth");
    tmp_location = window.location.pathname;
    window.location = tmp_location + '?key="'+ login +'"';    
}

function remove_key_to_window_location(){
    window.location = window.location.pathname;
}












// Das Obosono Objekt
var Obsono_Liste =
{
    die_db: $.couch.db("obsono_dev"),  
    login: function(login, pass)
    {    
        $.couch.login({username:login, password:pass, userdb:'obsono_dev',
          success: function(data) 
            {
                $.cookies.set("obsono_auth", login);
                add_key_to_window_location();
            },
          error: function(data)
            {
                Obsono_Liste.toggleLoginView('show');
                $.cookies.del('obsono_auth');
            }
        });
        return false;
    },
    
    logout: function()
    {
        $.couch.logout({
            success: function(data)
            {
                $.cookies.del('obsono_auth');
                //Obsono_Liste.toggleLoginView('show');
                remove_key_to_window_location();
                //window.location.reload();                
            },
            error: function(data) {
                return false;
            }
        });
        return false;
    },
    
    // Login und Logout Formular hin und herschalten.
    toggleLoginView: function(status)
    {
        if (status == 'hide') {
            $("#nutzerlogin").hide();
            $("#nutzerlogout").show();
        } else {
            $("#nutzerlogin").show();
            $("#nutzerlogout").hide();           
        }
    },
    
    ////// LISTEN //////
    // Neue, leere Liste erstellen
    createNewList: function(value)
    {
        dieListe = {username:$.cookies.get("obsono_auth"), type:'Einkaufsliste', listenname:value};
        standorteDefault = [{"standort": "Sonstige"}];
        dieListe.produkte = standorteDefault;
        Obsono_Liste.die_db.saveDoc(dieListe, {
            success: function(data)
            {
                window.location.reload();                
            }
        });        
    },

    // Liste in Datenbank schreiben
    writeList: function()
    {
        if ($.cookies.get("obsono_auth") != null) {
            listid = $('#listid').val();
            revid = $('#revid').val();
            created_at = $('#created_at').val();
      
            if (!created_at) {
              created_at = new Date();
              created_at = created_at.toLocaleString();
            }
            
            uberschrift = $('#einzellisten_ueberschrift_text').html();
            //tabelle = $('.productrow') //.children().children();            
            
            dieListe = {username:$.cookies.get("obsono_auth"), type:'Einkaufsliste', listenname:uberschrift};
            if (listid){dieListe._id = listid;}
            if (revid){dieListe._rev = revid;}
            if (created_at){dieListe.created_at = created_at};
        
            dieProdukte = $('.regal').children().children('.singlesort');  
            
            standorteTMP = [{}];
            dieProdukte.each(function (i, x)
            {
              dieProdukteTMP = [{}];
              dieProduktSichtbarkeitTMP = [{}];
              doclength = x.children.length;
              if (doclength>0)
              {
                for(var idx = 0; idx < doclength; idx++) {
                  if (x.children[idx].children[1]) {
                      dieProdukteTMP[idx] = x.children[idx].children[1].innerHTML;
                      dieProduktSichtbarkeitTMP[idx] = x.children[idx].className;
                  }
                }
                standorteTMP[i] = {standort: dieProdukte.get(i).id, produkte: dieProdukteTMP, produktsichtbarkeit: dieProduktSichtbarkeitTMP};
              } else {
                standorteTMP[i] = {standort: dieProdukte.get(i).id};
              }      
            
            });
        
            
            dieListe.produkte = standorteTMP;     
            Obsono_Liste.die_db.saveDoc(dieListe, {
              success: function(doc) 
              {
                window.location.reload();
              }        
            });
      
            //window.location.reload();
            //this.updateLists(listid);
        } else {
            alert('Sie müssen eingeloggt sein, um die Liste abspeichern zu können.')
        }
        return false;
    },
    
    deleteThisList: function(listenid,revid)
    {
      this.die_db.removeDoc({_id:listenid, _rev:revid}, 
        {
          success: function(doc) 
          {
            window.location.reload();
          }
        });
    },    

    boughtThisList: function(listenid,revid)
    {
        this.die_db.openDoc(listenid, 
          {
            success: function(doc) 
            {
                doc.listenstatus = 'bought';
                Obsono_Liste.die_db.saveDoc(doc, {
                  success: function(doc) 
                  {
                    window.location.reload();
                  }        
                });
            }
          });
        //return false;  
    },   
    
    ////// PRODUKTE //////////
    // Neues Produkt zu einem Regal in der Liste hinzufügen
    addNewProduct: function(values)
    {

      regalID = values.standort;
 
      // Wenn das Regal "sonstige" noch nicht existiert, wird es hinzugefügt.
      if (regalID == 'Sonstige') {
        if($('#' + regalID).length == 0){
          Obsono_Liste.addRegalfach('Sonstige', 'Sonstige');
        }
      } else {
        if($('#' + regalID).length == 0){
          Obsono_Liste.addRegalfach(regalID, regalID);
        }        
      }
  
      $('#' + regalID).createAppend(
                  'div', { className: 'ui-state-default'}, [
                    'div', { className: 'handle', style: 'padding-top: 15px; float: left;'}, '&nbsp;&nbsp;&nbsp;&nbsp;',
                    'div', { className: 'edit', style: 'padding-top: 8px; width: 500px; float: left;'}, values.produktname,
                    'a', {href: '#', style: 'padding-top: 16px;', onclick: 'Obsono_Liste.deleteThisProduct(this); return false;', className: 'deleteProduct'}, '&nbsp;'                   
                  ]
      );              
      
      $('.edit').editable(function(value, settings) { 
           return(value);
        }, { 
           type    : 'text',
           tooltip   : 'Zum Bearbeiten anklicken...',
           width: 150,
           submit  : 'OK',
       });
  
       $("#obsonoprodukt").focus();          
    },    

    // Ein Produkt aus der Liste löschen 
    deleteThisProduct: function(product)
    {
      $(product).parent().remove();
    },  

    // Ein Produkt aus der Liste in den Wagen legen oder wieder zurück
    toggleThisProductsCartStatus: function(product)
    {     
        if (product.className == 'boughtProduct') {
          $(product).parent().removeClass("bought").addClass("ui-state-default");
          $(product).removeClass("boughtProduct").addClass("buyProduct");
          product.title = 'Produkt in Wagen legen';
        } else {
          $(product).parent().removeClass("ui-state-default").addClass("bought");
          $(product).removeClass("buyProduct").addClass("boughtProduct");
          product.title = 'Produkt aus Wagen nehmen';
        }
    },

    // Ein Liste der Produkte mit dazugehörigen Regalen als autocomplete anbieten
    getProduktStandortView: function(produkt)
    {
        Obsono_Liste.die_db.view('obsono/produkt-standort-reduce', 
        //Obsono_Liste.die_db.view('obsono/produkt-standort', 
          {
            //keys:[login],
            group: true,
            success: function(doc) 
            {           
               var data = doc.rows;
               $("#obsonoprodukt").autocomplete(data, {
                           minChars: 0,
                           max: 100,
                           width: 310,
                           matchContains: false,
                           highlightItem: false,
                           formatItem: function(row, i, max, term) { 
                                return row.key[0].replace(new RegExp("(" + term + ")", "gi"), "<strong>$1</strong>") + "<br><span style='font-size: 80%;'>Regal: &lt;" + row.key[1] + "&gt;</span>";
                                //return row.key.replace(new RegExp("(" + term + ")", "gi"), "<strong>$1</strong>") + "<br><span style='font-size: 80%;'>Regal: &lt;" + row.value.standort + "&gt;</span>";
                           },
                           formatResult: function(row) {
                               return row.key[0]; // + '##|##' + row.value.standort;
                            //return false;
                           }
                   });

                    $("#obsonoprodukt").result(function(event, data, formatted) {
                            var hidden = $("#obsonoproduktregal"); //$(this).parent().next().find(">:input");
                            hidden.val(data.key[1]);
                    });
               
        
            }
          });
    },
    ////// REGALE  ///////
    getAllStandortView: function()
    {

      Obsono_Liste.die_db.openDoc('allg_produkt_standorte', 
      {
        success: function(doc) 
        { 
          if (doc.standortarray) {          
            data = doc.standortarray
            $("#obsonoproduktregal").autocomplete(data, {
                    minChars: 0,
                    max: 100,
                    autoFill: true,            
                    width: 310,
                    matchContains: false,
                    highlightItem: false,
                    formatItem: function(row, i, max, term) {            
                        return row.regal;
                                 },
                    formatResult: function(row) {
                        return row.regal;
                    }
            });         
          }
        }
      });
       
    },
    
    //den Inhalt eines Regals sortierbar machen
    makeRegalSortable: function(regal) {
        $("#" + regal).sortable({
            placeholder: 'ui-state-highlight',
            connectWith: '.singlesort'
        });
        $("#" + regal).disableSelection();               
    },
    
    // Ein Regal aus der Liste löschen
    deleteThisRegal: function(regal)
    {
      $(regal).parent().remove();
    },  
    
    // hinzufügen aller Regale aus dem Dokument "allg_produkt_standorte"
    setRegaleListe: function(user_id)
    {
      Obsono_Liste.die_db.openDoc('allg_produkt_standorte', 
      {
        success: function(doc) 
        { 
          if (doc.standortliste) {          
            $.each(doc.standortliste, function(key, standort) {
              Obsono_Liste.addRegalfachToPage(key, standort);            
            });
          }
        }
      });
    },    
    
    addRegalfachToPage: function(key, standort)
    {
      //die regale hinzufügen (aus der standortliste extrahieren)
      regalID = key + 'test';
      $('#regalliste').createAppend(  
                  'div', { className: 'ui-state-default', id: 'einRegal'}, [                  
                    'a', { href: '#', className: 'regaladd',  onclick: 'Obsono_Liste.addThisRegal(this); return false;'}, standort,                                   
                  ]
      );  
    },

    addThisRegal: function(regalfach)
    {
      dasRegal = regalfach.innerHTML;
      test = $('#'+dasRegal);
      if ($('#'+dasRegal).length > 0) {
        alert('Dieses Regal haben sie schon ausgewählt.');
      } else {
        Obsono_Liste.addRegalfach(dasRegal, dasRegal);
        //alert('no');
      }                 
    },
    
    addRegalfach: function(key, standort)
    {
      //die regale hinzufügen (aus der standortliste extrahieren)
      regalID = key;

      $('.regal').createAppend(
                  'div', { className: 'ui-state-default'}, [
                        'div', { className: 'handle', style: 'margin: 0pt 10px 0pt 0pt; padding: 0pt; width: 13px; float: left;' }, '&nbsp;',
                        'h3', { style: 'font-size: 14px; display: inline;' }, standort,
                        'a', {href: '#', onclick: 'Obsono_Liste.deleteThisRegal(this); return false;', className: 'deleteProduct'}, '&nbsp;',                  
                        'div', { className: 'singlesort', id: regalID}, ''                                    
                  ]
      );  
      
      //den Inhalt der regale sortierbar machen
      $("#" + regalID).sortable({
          placeholder: 'ui-state-highlight',
          connectWith: '.singlesort'
      });
      $("#" + regalID).disableSelection();     
    },       
    
    
};
