/*
Script: watchlist.js
	Watchlist handling

License:
	copyright (c) by msse professionelle software
	copyright (c) 2008-2010 Michael Schwarzl , <http://www.msse.at>

References:
	uses mootools library

*/

  //-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  // handling watchlist
  //-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  function convertStrToIntDef(value, deflt) {
    var tmpResult = parseInt(value);
    if (isNaN(tmpResult)) tmpResult = deflt;
    
    return tmpResult;
  }
  


  //-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  // handling watchlist
  //-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  var wldata = new Array();      // contains the watchlist items

  function formatNum(count, addtext, nulltext) {
    switch (count) {
      case 0: if (!nulltext) { return '' } else { return nulltext; };
      case 1: return '1 Produkt in' + addtext;
    }
    return count + ' Produkte in' + addtext;
  }

  function getWatchListIDs() {
    var result = new Array;
    for (var idx = 0; idx < wldata.length; ++idx) {
      var arti = wldata[idx].split('=');
      result.push(arti[0]);
    }
    
    return result;
  }

  function getWatchListIDsText() {
    result = getWatchListIDs.join(','); 
  }
  
  function createWatchListItemSmall(artid) {
    var arti = artid.split('=');

    var el = new Element('div', {'id': 'mkimg'});
    var a = new Element('a', {'href': '/de/pmklprd.htm?artid=' + arti[0]}).injectInside(el);
    var img = new Element('img', {'src': '/image.img?kind=art2&width=100&id=' + arti[0], 'border':'0', 'title': 'Klicken Sie hier, um dieses Produkt anzuzeigen.'}).injectInside(a);
    
    var deldiv = new Element('div', {'class': 'preview', 'id': 'mkimgdel', 'xtitle': 'Dieses Produkt aus der Merkliste nehmen.'}).injectAfter(a);
    deldiv.setProperty('artid', artid);
    deldiv.addEvent('click', function(){ removeFromWatchList(this.getProperty('artid')); });
//    deldiv.addEvent('click', function(){ a.setHref(0);  if (!((Browser.ie) && (Browser.version == 7))) { a.href=''; } removeFromWatchList(this.getProperty('artid')); });
    el.setStyle('opacity', '0.3');

    
//    if (window.ie) deldiv.setStyle('opacity', '0.3');

    var fx = new Fx.Morph(el, {duration:200, wait:false});
    el.addEvent('mouseenter', function(){ fx.start({ 'opacity': '1' }); });
    el.addEvent('mouseleave', function(){ fx.start({ 'opacity': '0.2' }); });
    
    return el;
  }

  function createWatchListItemDetail(artid, index) {
  
    var arti = artid.split('=');
  
    var datanews = new Element('div', {'id': 'datanews'});   
    var datacnt = new Element('div', {'id': 'datacnt'}).injectInside(datanews);  if (index < 9) { datacnt.innerHTML = '0' + (index+1); } else {datacnt.innerHTML = (index+1); };
    var dataimg = new Element('div', {'id': 'dataimg'}).injectAfter(datacnt);
      var a = new Element('a', {'href': '/de/pmklprd.htm?artid=' + arti[0]}).injectInside(dataimg);
        var img = new Element('img', {'src': '/image.img?kind=art2&width=90&id=' + arti[0], 'border':'0', 'title': 'Klicken Sie hier, um dieses Produkt anzuzeigen.'}).injectInside(a);
    var datatext = new Element('div', {'id': 'datatext', 'style': 'top:45px; left:160px;'}).injectAfter(dataimg);
      var h5 = new Element('h5', {}).injectInside(datatext);
        var a = new Element('a', {'href': '/de/pmklprd.htm?artid=' + arti[0]}).injectInside(h5);
        if (arti.length > 1) { a.innerHTML = arti[1]; } else {a.innerHTML = 'kein Text hinterlegt'; }
    
        
    var deldiv = new Element('div', {'id': 'mkimgdel', 'xtitle': 'Dieses Produkt aus der Merkliste nehmen.', 'style': 'position:absolute; left:16px; top:55px;'}).injectAfter(datatext);
    deldiv.setStyle('opacity', '0.2');
    deldiv.setProperty('artid', artid);
    deldiv.addEvent('click', function(){ removeFromWatchList(this.getProperty('artid')); });
    
    var fx = new Fx.Morph(deldiv, {duration:200, wait:false});
    deldiv.addEvent('mouseenter', function(){ fx.start({ 'opacity': '1' }); });
    deldiv.addEvent('mouseleave', function(){ fx.start({ 'opacity': '0.2' }); });
    
        
    return datanews;
  }
  
  function displayWatchListImages(images) {
  

    // display items to wathlist    
    var gallery = $('mklst');
    gallery.empty();
    for (var idx = 0; idx < images.length; ++idx) {
      createWatchListItemSmall(images[idx]).inject(gallery);
    }
    
    // check if watchlist detail exists
    if ($('edtmklcnt')) $('edtmklcnt').innerHTML = formatNum(wldata.length, ' der Merkliste', 'Es sind keine Produkte in der Merkliste'); 
    if ($('edtmkl')) {
      gallery = $('edtmkl');
      gallery.empty();
      
      for (var idx = 0; idx < images.length; ++idx) {
        createWatchListItemDetail(images[idx], idx).inject(gallery);
      }
    }

    // set printlinks
    var list = $$('.mklprint');
    list.each(function(element) {
       element.setProperty('href', '/partdru.htm?ms=5&art='+getWatchListIDs().join(','));
       element.setProperty('target', '_blank');
     });
    

    // set tooltips to delete buttons  
    var mytips = new Tips('#mkimgdel', {className: 'proform', showDelay: 400, hideDelay: 400, fixed: true}); 
  }

  function displayWatchLists() {
    $('mkcnt').innerHTML = formatNum(wldata.length, ' der');
    displayWatchListImages(wldata);
  }; 
  
  function loadWatchList() {
    var tmp = Cookie.read('mklst')
    if ((tmp == '') || (!tmp)) { wldata = new Array; } else { wldata = tmp.split(';'); }
    displayWatchLists();
  }
  
  function saveWatchList() {
    Cookie.write('mklst', wldata.join(';'), {duration: 30, path:'/'});
  }
  
  function addToWatchList(artid) {
    if (artid != '') { 
      if (wldata.indexOf(artid) == -1) wldata.push(artid);
      saveWatchList();
      displayWatchLists();
    }
  }

  function removeFromWatchList(artid) {
    if (artid != '') {
      var pidx = wldata.indexOf(artid) ;
      if (pidx >= 0) wldata.splice(pidx, 1);
      saveWatchList();
      displayWatchLists();
    }
  }

  function clearWatchList() {
     wldata = new Array;
     saveWatchList();
     displayWatchLists();
  }

  function initWatchList() {
     loadWatchList();
     displayWatchLists();
  }




  //-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  // handling OfferBasket
  //-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  var obdata = new Array();      // contains the offer basket items

  function getOfferBasketIDs() {
    var result = new Array;
    for (var idx = 0; idx < obdata.length; ++idx) {
      var arti = obdata[idx].split('|');
      result.push(arti[0]);
    }
    
    return result;
  }

  function getOfferBasketARTID(index) {
    if ((index < obdata.length) && (index >= 0)) {
      var line = obdata[index].split('|');
      return line[0];
    } else
      return '-1';
  }

  function getOfferBasketIDsText() {
    result = getOfferBasketIDs.join(','); 
  }
  
  function createOfferBasketItemDetail(artid, index) {
  
    var arti = artid.split('|');

    if (arti.length < 4) arti.push('0');
    if (arti.length < 5) arti.push('');
          
    var datanews = new Element('div', {'id': 'datanews'}); 
      
    var edtcnt = new Element('div', {'id': 'datatext', 'style': 'top:30px; left:10px; width: 30px;'}).injectInside(datanews);
      var edt2 = new Element('input', {'name': 'count.'+arti[0], 'id': 'count.'+arti[0], 'class': 'edit', 'type': 'text', 'style': 'width: 30px;', 'value':arti[3]}).injectInside(edtcnt);
      edt2.setProperty('artid', artid);
      edt2.addEvent('change', function(){ 
        edt2.value = convertStrToIntDef(edt2.value, 0);
        updateOfferBasket(this.getProperty('artid'), edt2.value, null, false); 
      });    // (artid, count, text, refreshDisplay)

    var deldiv = new Element('div', {'id': 'mkimgdel', 'xtitle': 'Dieses Produkt aus der Merkliste nehmen.', 'style': 'position:absolute; left:9px; top:60px;'}).injectAfter(edtcnt);
      deldiv.setStyle('opacity', '0.2');
      deldiv.setProperty('artid', artid);
      deldiv.addEvent('click', function(){ removeFromOfferBasket(this.getProperty('artid')); });
    
      var fx = new Fx.Morph(deldiv, {duration:200, wait:false});
      deldiv.addEvent('mouseenter', function(){ fx.start({ 'opacity': '1' }); });
      deldiv.addEvent('mouseleave', function(){ fx.start({ 'opacity': '0.2' }); });
    
//    var datacnt = new Element('div', {'id': 'datacnt'}).injectAfter(deldiv);  if (index < 9) { datacnt.innerHTML = '0' + (index+1); } else {datacnt.innerHTML = (index+1); };
    
    var dataimg = new Element('div', {'id': 'dataimg'}).injectAfter(deldiv);
      var a = new Element('a', {'href': '/de/pmklprd.htm?artid=' + arti[0]}).injectInside(dataimg);
        var img = new Element('img', {'src': '/image.img?kind=art2&width=90&id=' + arti[0], 'border':'0', 'title': 'Klicken Sie hier, um dieses Produkt anzuzeigen.'}).injectInside(a);

    var datatext = new Element('div', {'id': 'datatext', 'style': 'top:15px; left:160px; width: 245px;'}).injectAfter(dataimg);
      var h5 = new Element('h5', {}).injectInside(datatext);
        var a = new Element('a', {'href': '/de/pmklprd.htm?artid=' + arti[0]}).injectInside(h5);
        if (arti.length > 1) { a.innerHTML = arti[2]; } else {a.innerHTML = 'kein Text hinterlegt'; }
    
    var edttxt = new Element('div', {'id': 'datatext', 'style': 'top:30px; left:160px; width: 245px;'}).injectAfter(datatext);
      var edt = new Element('textarea', {'name': 'text.'+arti[0], 'class': 'edit', 'type': 'text', 'style': 'height:60px; width: 240px;', 'value':arti[4]}).injectInside(edttxt);
      edt.setProperty('artid', artid);
      edt.addEvent('change', function(){ 
        updateOfferBasket(this.getProperty('artid'), null, edt.value, false); 
      });    // (artid, count, text, refreshDisplay)
    

        
    return datanews;
  }
  
  function displayOfferBasketImages(images) {

    // check if OfferBasket detail exists
    if ($('edtobcnt')) $('edtobcnt').innerHTML = formatNum(obdata.length, ' dem Angebotskorb', 'Es sind keine Produkte im Angebotskorb'); 
    if ($('edtob')) {
      gallery = $('edtob');
      gallery.empty();
      
      for (var idx = 0; idx < images.length; ++idx) {
        createOfferBasketItemDetail(images[idx], idx).inject(gallery);
      }
    }

    // set printlinks
    var list = $$('.obprint');
    list.each(function(element) {
       element.setProperty('href', '/partdru.htm?ms=5&art='+getOfferBasketIDs().join(','));
       element.setProperty('target', '_blank');
     });
    

    // set tooltips to delete buttons  
    var mytips = new Tips('#mkimgdel', {className: 'proform', showDelay: 400, hideDelay: 400, fixed: true}); 
  }

  function displayOfferBaskets() {
    $('obcnt').innerHTML = formatNum(obdata.length, ' dem');
    displayOfferBasketImages(obdata);
  }; 
  
  function loadOfferBasket() {
    var tmp = Cookie.read('oblst')
    if ((tmp == '') || (!tmp)) { obdata = new Array; } else { obdata = tmp.split('[newline]'); }
    displayOfferBaskets();
  }
  
  function saveOfferBasket() {
    Cookie.write('oblst', obdata.join('[newline]'), {duration: 30, path: '/'});
  }
  
  function addToOfferBasket(artid, artname) {
    if (artid != '') { 
      if (obdata.indexOf(artid) == -1) obdata.push(artid + '|' + Math.uuid() +'|' + artname + '|0|');
      saveOfferBasket();
      displayOfferBaskets();
    }
  }
  
  function getOfferBasketIndex(artid) {
    if (artid != '') {
      var arti = artid.split('|');
      for (var idx = 0; idx < obdata.length; ++idx) {
        // split line to record entries
        var record = obdata[idx].split('|');
        if (record[1] == arti[1]) {    // compare by generated uuid
          return idx;
        }
      }
    }
    return -1;
  }
  
  function getOfferBasketItemCount(artid) {
    var arti = artid.split('|');
    if (arti.length < 4) arti.push('0');
    return convertStrToIntDef(arti[3], 0);
  }

  function getOfferBasketItemCaption(artid) {
    var arti = artid.split('|');
    return arti[2];
  }

  function updateOfferBasket(artid, count, text, refreshDisplay) {
    if (artid != '') {
      var arti = artid.split('|');
      for (var idx = 0; idx < obdata.length; ++idx) {
        // split line to record entries
        var record = obdata[idx].split('|');
        if (record[1] == arti[1]) {    // compare by generated uuid
          // add missing items
          if (record.length < 4) record.push(convertStrToIntDef(count, 0)); 
          if (record.length < 5) record.push('');
          
          // set content
          if (count) record[3] = convertStrToIntDef(count, 0); 
          if (text) record[4] = text;
          
          // recode record to line
          obdata[idx] = record.join('|');
        }
      }

      saveOfferBasket();
      if (refreshDisplay) displayOfferBaskets();
    }
  }
 
  function removeFromOfferBasket(artid) {
    if (artid != '') {
      var pidx = getOfferBasketIndex(artid) ;
      if (pidx >= 0) obdata.splice(pidx, 1);
      saveOfferBasket();
      displayOfferBaskets();
    }
  }

  function clearOfferBasket() {
     obdata = new Array;
     saveOfferBasket();
     displayOfferBaskets();
  }

  function initOfferBasket() {
     loadOfferBasket();
     displayOfferBaskets();
  }

  


  function copyWatchListToOfferBasket() {

     obdata = new Array;
     
     for (var idx = 0; idx < wldata.length; ++idx) {
       var wlr = wldata[idx].split('=');
       if (wlr[0]) { 
         obdata.push(wlr[0] + '|' + Math.uuid() +'|' + wlr[1] + '|0|');
       }
     }
     
     saveOfferBasket();
     displayOfferBaskets();
  }

  

  window.addEvent('domready', function(){ initWatchList(); initOfferBasket(); });  
  

