// nbc.js

var nbc = nbc || {};
nbc.SERVICE_URL = '/community/services/rest/';

nbc.Commentable = function(domObj)
{
  var d = jQuery(domObj);

  var params = {};
  var tmp = d.attr('id').split('__');
  if (tmp.length == 2)
  {
    params[tmp[0]] = tmp[1];
  }
  else
  {
    params['external_id'] = d.attr('id');
  }

  var img = document.createElement('img');
      img.src = (nbc.PROFILE_IMAGE || '/community/default/') + '49x49.jpg';
      img.style.display = 'none';

  var txt = document.createElement('textarea');
  jQuery(txt).val('Schreibe einen Kommentar...');

  var btn = document.createElement('input');
      btn.type = 'submit';
      btn.value = 'Kommentieren';
      btn.style.display = 'none';

  jQuery(btn).click(function() { submitComment(); });

  var li = document.createElement('li');
      li.className = 'mycomment';
      li.appendChild(img);
      li.appendChild(txt);
      li.appendChild(btn);
      
  if (!Number(nbc.PROFILE_ID))
  {
    li.style.display = 'none';
  }

  var comments = jQuery('ol.comments', domObj).get(0);
  var doLoad = false;
  if (!comments)
  {
    doLoad = true;
    var comments = comments || document.createElement('ol');
        comments.className = 'comments';

    d.append(comments);
  }

  if (jQuery(comments).find('li.comment').length == 0 && jQuery('a.magEnableComments', domObj).length == 1)
  {
    jQuery(comments).hide();
    jQuery('a.magEnableComments', domObj).show().click(function(e)
    {
      e.preventDefault();
      jQuery(comments).show();
      jQuery(this).hide();
    });
  }

  comments.appendChild(li);

  if (jQuery(comments).attr('data'))
  {
    comments.data = jQuery.parseJSON(jQuery(comments).attr('data'));
  }
  else
  {
    comments.data = { total_count: jQuery(comments).find('li.comment').length };
  }

  function addCounter()
  {
    if (comments.data && comments.data.total_count > jQuery(comments).find('li.comment').length)
    {
      var a = document.createElement('a');
          a.href = '#';
          a.innerHTML = 'Alle ' + comments.data.total_count + ' Kommentare anzeigen.';
          jQuery(a).click(function(e)
          {
            e.preventDefault();
            loadComments(1, comments.data.total_count);
            jQuery(this.parentNode).hide();
          });
          
      var sprite = document.createElement('span');
          sprite.className = 'sprite-comments';
          
      var li = document.createElement('li');
          li.appendChild(sprite);
          li.appendChild(a);

      comments.insertBefore(li, comments.firstChild);
    }
  }

  jQuery('span.date', domObj).each(function() 
  {
    nbc.fancyDate(this);
  });

  jQuery('a.magDelComment', domObj).click(function(e)
  {
    e.preventDefault();
    var comment_id = jQuery(this).attr('href').substr(2);
    deleteComment(comment_id, jQuery(this).parents('li').get(0));
  });

  jQuery(txt).focus(function() 
  { 
    if (!this.setupValue) 
      this.setupValue = jQuery(this).val();

    if (jQuery(this).val().length > 0 && this.setupValue.length > 0 && jQuery(this).val() != this.setupValue)
      return;

    jQuery(btn).show();
    jQuery(img).show();
    jQuery(this).addClass('focused').val('');
  });

  jQuery(txt).blur(function() 
  { 
    if (jQuery(this).val().length > 0)
      return;

    jQuery(btn).hide();
    jQuery(img).hide();
    jQuery(this).removeClass('focused').val(this.setupValue);
  });

  if (doLoad)
  {
    loadComments();
  }
  else
  {
    addCounter();
  }

  function loadComments(page, per_page)
  {
    var prm = params;
        prm.method = 'nbc.comment.get';
        prm.format = 'json';
        prm.page = page || 1;
        prm.per_page = per_page || 5;

    jQuery.get(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (data.isloggedin)
        {
          jQuery(li).show();
        }

        if (!data.success) 
        {
          jQuery('a.magEnableComments', domObj).show().click(function(e)
          {
            e.preventDefault();
            jQuery(comments).show();
            jQuery(this).hide();
          });

          return;
        }

        comments.data = comments.data || {};
        comments.data.total_count = data.total;
        jQuery(data.comments.comment).each(function()
        {
          addComment(this);
        });
        addCounter();
      }, 
      'json'
    );
  }

  function addComment(c, doAppend)
  {
    if (jQuery('li#magComment' + c.comment_id, comments).length)
    {
      return;
    }

    var pimg = document.createElement('img');
        pimg.src = c.profile_image + '49x49.jpg';
        pimg.alt = c.displayname;

    var pname = document.createElement('a');
        pname.href = c.profile_link;
    jQuery(pname).text(c.displayname);

    var ctxt = document.createElement('p');
        ctxt.className = 'text';

    var cdate = document.createElement('span');
        cdate.className = 'date';
    jQuery(cdate).text(c.cdate);

    ctxt.appendChild(pname);
    ctxt.appendChild(document.createElement('br'));
    ctxt.appendChild(document.createTextNode(c.text));
    ctxt.appendChild(document.createElement('br'));
    ctxt.appendChild(cdate);

    var li = document.createElement('li');
        li.id = 'magComment' + c.comment_id;
        li.className = 'comment';
        li.appendChild(pimg);
        li.appendChild(ctxt);

    if (typeof c.del != "undefined" && c.del)
    {
      var btndel = document.createElement('a');
          btndel.href = '#c'+c.comment_id;
          btndel.innerHTML = '&bull; Entfernen'
          btndel.className = 'magDelComment';
          jQuery(btndel).click(function(e)
          {
            e.preventDefault();
            deleteComment(c.comment_id, li);
          });
      ctxt.appendChild(document.createTextNode(' '));
      ctxt.appendChild(btndel);
    }

    if (doAppend)
    {
      li.style.display = 'none';
      comments.insertBefore(li, comments.lastChild);
      jQuery(li).fadeIn('slow');
    }
    else
    {
      comments.insertBefore(li, comments.firstChild);
    }

    nbc.fancyDate(cdate);
  }

  function submitComment()
  {
    var prm = params;
        prm.method = 'nbc.comment.create';
        prm.format = 'json';
        prm.text   = jQuery(txt).val();

    jQuery.post(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (!data.success) return;
        
        data.comment.del = true;
        addComment(data.comment, true);
        jQuery(txt).val('').blur();
      }, 
      'json'
    );
  }

  function deleteComment(comment_id, domObj)
  {
    if (!confirm('Möchtest du diesen Kommentar wirklich löschen?'))
    {
      return;
    }

    var prm = params;
        prm.method = 'nbc.comment.delete';
        prm.format = 'json';
        prm.comment_id = comment_id;

    jQuery.post(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (!data.success) return;
        jQuery(domObj).remove();
      }, 
      'json'
    );
  }
}

nbc.Collapse = function(domObj)
{
  var d = jQuery(domObj);  
  var collapsed = 4 * d.css('line-height').replace('px','');
  
  if(isNaN(collapsed)){
    collapsed = 4 * d.css('font-size').replace('px','') * 1.25;
  }
  
  if(d.height() <= collapsed){
    return true;
  }
  
  function doCollapse()
  {
	  d.css({
		  'overflow': 'hidden',
		  'height': collapsed
	  });
  }

  function doExpand()
  {
	  d.css({
		  'overflow': 'visible',
		  'height': ''
	  });  
  }  
    
  doCollapse();
	
  var more = document.createElement('a');
	  more.href = '#';
	  more.className = 'magMore';
  jQuery(more).text('mehr...').click(function(e) { 
    e.preventDefault(); 
	doExpand();
	jQuery(this).hide().prev('a').show(); 
  });  
  d.after(more);     
	
  var less = document.createElement('a');
	  less.href = '#';
	  less.className = 'magLess';
  jQuery(less).text('...weniger').click(function(e) { 
    e.preventDefault(); 
	doCollapse();
	jQuery(this).hide().next('a').show(); 
  }).hide(); 
  d.after(less);
    
}

nbc.Likeable = function(domObj)
{
  var d = jQuery(domObj);

  var params = {};
  var tmp = d.attr('id').split('__');
  if (tmp.length == 2)
  {
    params[tmp[0]] = tmp[1];
  }
  else
  {
    params['external_id'] = d.attr('id');
  }

  var c_likers = jQuery('span.likers', domObj).get(0);
  var likers = new nbc.Likeable.Likers(c_likers, false);

  var c_dislikers = jQuery('span.dislikers', domObj).get(0);
  var dislikers = new nbc.Likeable.Likers(c_dislikers, true);

  function doLike()
  {
    var prm = params;
        prm.method = 'nbc.pinboard.like';
        prm.format = 'json';

    jQuery.post(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (!data.success) return;

        jQuery('.magLike', domObj).replaceWith('&bull; Dir gefällt das!');
        jQuery('.magDislike', domObj).remove();
        c_likers.like();
      }, 
      'json'
    );
  }
  jQuery('.magLike', domObj).click(function(e) { e.preventDefault(); doLike(); });

  function doDislike()
  {
    var prm = params;
        prm.method = 'nbc.pinboard.dislike';
        prm.format = 'json';

    jQuery.post(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (!data.success) return;

        jQuery('.magDislike', domObj).replaceWith('&bull; Das gefällt dir nicht!');
        jQuery('.magLike', domObj).remove();
        c_dislikers.dislike();
      }, 
      'json'
    );
  }
  jQuery('.magDislike', domObj).click(function(e) { e.preventDefault(); doDislike(); });

  function doUnlike(fromDislike)
  {
    var prm = params;
        prm.method = 'nbc.pinboard.unlike';
        prm.format = 'json';

    jQuery.post(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (!data.success) return;

        jQuery('.magUnlike', domObj).remove();
        fromDislike ? c_dislikers.unlike() : c_likers.unlike();
      }, 
      'json'
    );
  }
  jQuery('.magUnlike', domObj).click(function(e) { e.preventDefault(); doUnlike(this.innerHTML.match(/nicht/) != null); });
}
 
nbc.Likeable.Likers = function(domObj, typeDislike)
{
  if (!jQuery(domObj).attr('data')) return;
  
  var numbers = ['Null', 'Einer', 'Zwei', 'Drei', 'Vier', 'Fünf', 'Sechs', 'Sieben',
                 'Acht', 'Neun', 'Zehn', 'Elf', 'Zwölf'];

  var d = jQuery(domObj);
  var data = jQuery.parseJSON(d.attr('data'));
  if (!data) 
  {
    data = { total_count: 0, users: [] }
  } 
  else
  {
    data.users = data.likes || data.dislikes;
  }
  data.typeDislike = typeDislike == true;

  domObj.parentNode.containers = domObj.parentNode.containers || [];
  domObj.parentNode.containers.push(domObj);

  domObj.like = domObj.dislike = function()
  {
    data.total_count++;
    data.users.push({ name: nbc.DISPLAYNAME, profile_id: nbc.PROFILE_ID });
    refresh();
  }

  domObj.unlike = function()
  {
    data.total_count--;
    var u = [];
    for (var i=0; i<data.users.length; i++)
    {
      if (data.users[i].profile_id != nbc.PROFILE_ID)
      {
        u.push(data.users[i]);
      }
    }
    data.users = u;
    refresh();
  }

  function refresh()
  {
    if (data.total_count > 1)
    {
      var num = numbers[data.total_count] ? numbers[data.total_count] : data.total_count;
      var person = numbers[data.total_count] == "Einer" ? 'Person' : 'Personen';
      for (var i=0; i<data.users.length; i++)
      {
        if (data.users[i].profile_id == nbc.PROFILE_ID)
        {
          var num = 'Dir und '
                  + (numbers[data.total_count - 1] ? numbers[data.total_count - 1] : data.total_count - 1).toLowerCase()
                  + ' anderen ';
          person = numbers[data.total_count - 1] == "Einer" ? 'Person' : 'Personen';
          break;
        }
      }

      var t = data.typeDislike ? num + ' ' + person + ' gefällt das nicht.' : num + ' ' + person + ' gefällt das.';
      jQuery(domObj).html(t);
      jQuery(domObj).show();
      jQuery(domObj.parentNode).show();
    }
    else if (data.total_count > 0)
    {
      var name = data.users[0].profile_id == nbc.PROFILE_ID ? 'Dir' : data.users[0].name;
      var t = '<a href="/community/' + nbc.hyphenize(data.users[0].name) + '-' + data.users[0].profile_id + '">' + name + '</a>';
      for (var i = 1; i < data.users.length; i++)
      {
        if (i == data.users.length - 1) t += ' und '; 
        else t += ', ';
        
        name = data.users[i].profile_id == nbc.PROFILE_ID ? 'Dir' : data.users[i].name;
        t += '<a href="/community/' + nbc.hyphenize(data.users[i].name) 
          +  '-' + data.users[i].profile_id + '">' + name + '</a>';
      }

      t += typeDislike ? ' gefällt das nicht.' : ' gefällt das.';
      jQuery(domObj).html(t);
      jQuery(domObj).show();
      jQuery(domObj.parentNode).show();
    }
    else
    {
      jQuery(domObj).html('');
      jQuery(domObj).hide();
      for (var i=0; i<domObj.parentNode.containers.length; i++)
      {
        if (jQuery(domObj.parentNode.containers[i]).is(':visible')) return;
      }
      jQuery(domObj.parentNode).hide();
    }
  }

  refresh();
}

nbc.Postable = function(domObj)
{
  var f = jQuery(domObj);
      f.submit(function(e) { e.preventDefault(); submitPost(); });
  var txt = jQuery('textarea', domObj);
  var btn = jQuery('input[type=submit]', domObj);
  var profile_id = jQuery('input[name=profile_id]', domObj).val();

  jQuery(txt).focus(function() 
  { 
    if (!this.setupValue) 
      this.setupValue = jQuery(this).val();

    if (jQuery(this).val().length > 0 && this.setupValue.length > 0 && jQuery(this).val() != this.setupValue)
      return;

    jQuery(btn).show();
    jQuery(this).addClass('focused').val('');
  });

  jQuery(txt).blur(function() 
  { 
    if (jQuery(this).val().length > 0)
      return;

    jQuery(btn).hide();
    jQuery(this).removeClass('focused').val(this.setupValue);
  });

  function submitPost()
  {
    jQuery(domObj).mask('Bitte warten...');

    var prm = {};
        prm.method = 'nbc.pinboard.post';
        prm.format = 'json';
        prm.profile_id = profile_id;
        prm.text = jQuery(txt).val();

    jQuery.post(nbc.SERVICE_URL, prm,
      function(data)
      {
        if (!data.success) 
        {
          jQuery(domObj).unmask();
        }

        document.location.reload();
      }, 
      'json'
    );
  }
}

nbc.reportAbuse = function()
{
  jQuery.modal(
      '<div class="modalmsg abuse"><h1>Missbrauch melden</h1>'
    + '<p><label>Stimmt hier etwas nicht? Beschreibe uns bitte kurz die Angelegenheit,<br /> wir kümmern uns dann so bald wie möglich um deine Meldung.</label></p><p><br />'
    + '<textarea rows="8"></textarea></p><p>'
    + '<input type="submit" value="Absenden" />'
    + '</p>'
    + '</div>'
  , {
    modal: false,
    onShow: function (dialog)
    {
      jQuery('input[type=submit]', dialog.data).click(function (e)
      {
        e.preventDefault();
        var url = location.href;
        var txt = jQuery('textarea', dialog.data).val();
        if (!txt.length) return;
        jQuery.post(nbc.SERVICE_URL, { url: url, text: txt, format: 'json', method: 'nbc.abuse.report' }, jQuery.modal.close, 'json');
      });
    }
  });
}





nbc.fancyDate = function (obj)
{
  var re = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
  var m = re.exec(jQuery(obj).text());
  if (!m) return;
  
  obj.commentDate = new Date(m[1], parseInt(m[2])-1, parseInt(m[3]), m[4], m[5], m[6]);
  obj.update = function()
  {
    var now = new Date();
    var age = Math.ceil((now.getTime() - this.commentDate.getTime()) / 1000);
    var days = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];

    var txt = m[3]+'.'+m[2]+'.'+m[1];
    if (age < 60) 
      { txt = (age < 5 ? 'gerade eben' : 'vor ' + age + ' Sekunden'); }

    else if (age < 3600) 
      { txt = 'Vor ' + (age < 120 ? 'etwa einer Minute' : Math.ceil(age / 60) + ' Minuten'); }

    else if (age < 86400) 
      { 
        txt = this.commentDate.getDate() == now.getDate() - 1 
          ? 'Gestern, ' + nbc.zeroPad(this.commentDate.getHours(), 2) + ':' + nbc.zeroPad(this.commentDate.getMinutes(), 2) + ' Uhr'
          : ('Vor ' + (age < 7200 ? 'etwa einer Stunde' : Math.ceil(age / 3600) + ' Stunden')); 
      }

    else if (age < 604800)
      { 
        txt = this.commentDate.getDate() == now.getDate() - 1 
          ? 'Gestern, ' + nbc.zeroPad(this.commentDate.getHours(), 2) + ':' + nbc.zeroPad(this.commentDate.getMinutes(), 2) + ' Uhr'
          : days[this.commentDate.getDay()] + ', ' + nbc.zeroPad(this.commentDate.getHours(), 2) + ':' + nbc.zeroPad(this.commentDate.getMinutes(), 2) + ' Uhr'
      }

    jQuery(this).text(txt);
  }

  obj.update();

  obj.timer = window.setInterval(function() { obj.update(); }, 1000 * 60);
}

nbc.zeroPad = function (num, count)
{
  var numZeropad = num + '';
  while (numZeropad.length < count) 
  {
    numZeropad = "0" + numZeropad;
  }
  return numZeropad;
}

nbc.hyphenize = function (str)
{
  return str.replace(/[^\w\s-]+/, '').replace(/\s+/, '-').replace(/-{2,}/, '-').toLowerCase();
}

nbc.Error = function (msg)
{
  jQuery.modal('<div class="modalmsg error"><h1>Fehler</h1><p>' + msg + '</p></div>');
}

nbc.Notice = function (msg)
{
  jQuery.modal('<div class="modalmsg notice"><h1>Hinweis</h1><p>' + msg + '</p></div>');
}

nbc.Success = function (msg)
{
  jQuery.modal('<div class="modalmsg success"><h1>Ok!</h1><p>' + msg + '</p></div>');
}

nbc.Autocomplete = function(domObj){
  var d = jQuery(domObj);
  var method = d.attr('method');
  
  function split(val) {
    return val.split(/,\s*/);
  }
  function extractLast(term) {
    return split(term).pop();
  }	  

  d.autocomplete({
  source: function(request, response) {
  jQuery.ajax({
	 url: nbc.SERVICE_URL,
	 dataType: "json",
	 data: {
	   format:'json',
	   method: method,
	   keyword: extractLast(request.term)
	 },
	 success: function(data){
	   if(data.total == 0){                              
	     response(Array({ label: 'Keine Daten gefunden',value: '' }))    
	   }else{
	     response(jQuery.map(data.data, function(item,index) {
	       return {
	         label: item.name,
	         value: item.name
	       }
	     }))    
	   }
    }});},    
    minLength: 1      
  });	  
}

nbc.AutocompleteMulti = function(domObj){
  var d = jQuery(domObj);
  var method = d.attr('method');
	  
  function split(val) {
    return val.split(/,\s*/);
  }
  function extractLast(term) {
    return split(term).pop();
  }	  

  d.autocomplete({
  source: function(request, response) {
  jQuery.ajax({
    url: nbc.SERVICE_URL,
    dataType: "json",
    data: {
    format:'json',
      method: method,
      keyword: extractLast(request.term)
    },
    success: function(data){
      if(data.total == 0){                              
        response(Array({ label: 'Keine Daten gefunden',value: '' }))    
      }else{
        response(jQuery.map(data.data, function(item,index) {
          return {
            label: item.name,
            value: item.name
          }
        }))    
      }
    }});},
    focus: function() {
       // prevent value inserted on focus
       return false;
    },
    search: function() {
		// custom minLength
		var term = extractLast(this.value);
		if (term.length < 3) {
			return false;
		}
	},   
    select: function(event, ui) {
	  var terms = split( this.value );
	  // remove the current input
	  terms.pop();
	  // add the selected item
	  terms.push( ui.item.value );
	  // add placeholder to get the comma-and-space at the end
	  terms.push("");
	  this.value = terms.join(", ");
	  return false;
    },       
    minLength: 3      
  });	  
}

nbc.Amazon = function(domObj){
  
  var d = jQuery(domObj);	  
  var categorie = d.attr('categorie');

  d.after(' <a id="search-' + categorie + '" href="#">suchen</a>');    
  var searchButton = jQuery('#search-' + categorie);
  if(jQuery('#' + categorie).size() == 0){
    searchButton.after('<div id="' + categorie + '" class="amazon-search"></div>');
    var searchList = jQuery('#' + categorie);
  }else{
	var searchList = jQuery('#' + categorie);  
  }  
  
  if(jQuery('#user-' + categorie).size() == 0){  
    searchList.after('<div id="user-' + categorie + '" class="amazon-search"></div>');
    var userList = jQuery('#user-' + categorie);
  }else{
	var userList = jQuery('#user-' + categorie);  
  }

  function addItem(asin,type,el){
     jQuery.ajax({
	    url: nbc.SERVICE_URL,
	    dataType: "json",
	    data: {
		  method: 'nbc.amazon.addItem',
		  format: 'json',
	  	  asin: asin,
	  	  type: type
	    },          
	    success: function(data){
	      el.parent().parent().fadeOut('normal',function(){
	    	  updateList(userList);  
	      });	      	     
	    }
     });
  }

  function delItem(asin,el){
      jQuery.ajax({
    	url: nbc.SERVICE_URL,
        dataType: "json",
        data: {
    	  method: 'nbc.amazon.deleteItem',
    	  format: 'json',
          asins: asin
        },          
        success: function(data){
          el.parent().parent().fadeOut('normal',function(){
        	  updateList(userList);  
	      });         
        }
      });
  }
  
  function search(keywords,target,page){
	if(keywords == ''){
		return false;
	}	
    jQuery.ajax({
	    url: nbc.SERVICE_URL,
	    dataType: "json",
	    data: {
    	  method: 'nbc.amazon.itemSearch',
    	  format: 'json',
	      page: page,
	      search_index: categorie,
	      keywords: keywords
	    },
	    success: function(data){
	    	
	    	  if(data.stat == 'fail'){
	    		  var div = document.createElement('div');
	    		      div.innerHTML = 'Keine passenden Medien gefunden';
	    		  target.html(div);
	    		  return false;
	    	  }	  
	    	
	    	  var divPaging = document.createElement('div');
	    	      divPaging.className = 'paging';
	    	  var spanPrev = document.createElement('span');
	    	      spanPrev.className = 'prev';	    	 	    	  
    
         	  if(data.current_page > 1){
	     		  var aPrev = document.createElement('a');
	     		      aPrev.href = '#';
	     		      aPrev.innerHTML = '&lsaquo;';
	     		      jQuery(aPrev).click(function(){search(keywords,target,data.current_page-1);return false;});
	     		  spanPrev.appendChild(aPrev);
		   	  }else{
		   		  spanPrev.innerHTML = "&lsaquo;";
		   	  }
	    	  var spanCurr = document.createElement('span');
         	      spanCurr.className = 'current';
         	      spanCurr.innerHTML = data.current_page + " von " + data.total_pages;

  	    	  var spanNext = document.createElement('span');
  	    	      spanNext.className = 'next';
         	      
              if(data.current_page < data.total_pages){
	     		var aNext = document.createElement('a');
     		        aNext.href = '#';
     		        aNext.innerHTML = '&rsaquo;';
     		        jQuery(aNext).click(function(){search(keywords,target,data.current_page+1);return false;});
     		        spanNext.appendChild(aNext);
              }else{
            	spanNext.innerHTML = "&rsaquo;";
              }
              
        	  divPaging.appendChild(spanPrev);
        	  divPaging.appendChild(spanCurr);
        	  divPaging.appendChild(spanNext);              

              target.html(divPaging);		    	  
	          
              jQuery.each(data.items.item,function(index,item){		        
	            var div = document.createElement('div');
	            var spanAdd = document.createElement('span');
	                spanAdd.className = "right add";
	            var aAdd = document.createElement('a');
	                aAdd.href = "#";
	                aAdd.innerHTML = 'hinzufügen';
	            jQuery(aAdd).click(function(){addItem(item.asin,categorie,jQuery(this));return false;});
	            spanAdd.appendChild(aAdd);
	            div.appendChild(spanAdd);
	            var img = document.createElement('img');
                    img.src = item.smallimage_url;
                var pTitle = document.createElement('p');
                    pTitle.className = "title";
                    pTitle.innerHTML = item.title;
                var pDesc = document.createElement('p');
                    pDesc.className = "description";
                    if(categorie == 'DVD'){
                      pDesc.innerHTML = 'mit ' + item.actors;
                    }else if(categorie == 'Books'){
                      pDesc.innerHTML = 'von ' + item.authors;
                    }else if(categorie == 'Music'){
                      pDesc.innerHTML = 'von ' + item.artists;
                    }
                    
                div.appendChild(img);
                div.appendChild(pTitle);
                div.appendChild(pDesc);
            	target.append(div);
              });
	        	
	        } 		        
        });
    
	    return false;	    
	  }

  function updateList(target){
	  
	    jQuery.ajax({
		    url: nbc.SERVICE_URL,
		    dataType: "json",
		    data: {
	    	  method: 'nbc.amazon.getItemsOfUser',
	    	  format: 'json'
		    },
		    success: function(data){
		    	
	              target.html('');		    	  

	              if(categorie == 'DVD'){
	            	var items = data.dvd;
                  }else if(categorie == 'Books'){
                	var items = data.books;
                  }else if(categorie == 'Music'){
                	var items = data.music;
                  }	              
	              
	              jQuery.each(items,function(index,item){		        
		            var div = document.createElement('div');
		            var spanAdd = document.createElement('span');
		                spanAdd.className = "right delete";
		            var aAdd = document.createElement('a');
		                aAdd.href = "#";
		                aAdd.innerHTML = 'löschen';
		            jQuery(aAdd).click(function(){delItem(item.asin,jQuery(this));return false;});
		            spanAdd.appendChild(aAdd);
		            div.appendChild(spanAdd);
		            var img = document.createElement('img');
	                    img.src = item.smallimage_url;
	                var pTitle = document.createElement('p');
	                    pTitle.className = "title";
	                    pTitle.innerHTML = item.title;
	                var pDesc = document.createElement('p');
	                    pDesc.className = "description";
	                    if(categorie == 'DVD'){
	                      pDesc.innerHTML = 'mit ' + item.actors;
	                    }else if(categorie == 'Books'){
	                      pDesc.innerHTML = 'von ' + item.authors;
	                    }else if(categorie == 'Music'){
	                      pDesc.innerHTML = 'von ' + item.artists;
                        }
	                div.appendChild(img);
	                div.appendChild(pTitle);
	                div.appendChild(pDesc);
	            	target.append(div);
	              });
		        	
		        } 		        
	        });
	    
		    return false;	    
		  }
  
  searchButton.click(function(){
	  search(d.val(),searchList,1);
	  return false;
  });  
  
  updateList(userList);
  
}

nbc.Walk = function(dom)
{
  jQuery('.magDeletePost', dom).each(function()
  {
    if (this.dpWalked) return;
    this.dpWalked = true;

    jQuery(this).click(function(e) 
    { 
      e.preventDefault();

      if (!confirm('Möchtest du diesen Beitrag wirklich löschen?'))
      {
        return;
      }

      var post_id = jQuery(this).attr('href').replace(/[\D]+/g, '');
      var prm = {};
          prm.method  = 'nbc.pinboard.removePost';
          prm.format  = 'json';
          prm.post_id = post_id;

      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
        function(data)
        {
          if (!data.success) return;
          jQuery(_this).parents('.post').fadeOut('slow');
        }, 
        'json'
      );
    });
  });

  jQuery('.magDeleteMessage', dom).each(function(){
    if (this.dmWalked) return;
      this.dmWalked = true;

	jQuery(this).click(function(e){ 
      e.preventDefault();

      if (!confirm('Möchtest du diese Nachricht wirklich löschen?')){
	    return;
      }

	  var thread_id = jQuery(this).attr('href').replace('#thread', '');
	  var prm = {};
		  prm.method  = 'nbc.message.deleteThreads';
		  prm.format  = 'json';
		  prm.thread_ids = thread_id;

      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
	    function(data){
		  if (!data.success) return;
		  jQuery(_this).parents('.message').fadeOut('slow');
		}, 
		'json'
      );
	});
  });

  jQuery('.magDeleteFriend', dom).each(function(){
    if (this.dfWalked) return;
	this.dfWalked = true;

	jQuery(this).click(function(e){ 
      e.preventDefault();

      if (!confirm('Möchtest du die Freundschaft wirklich beenden?')){
	    return;
      }
      
      var ids = jQuery(this).attr('href').split('#');
	  var friend_profile_id = ids[1].replace('friend', '');
	  var profile_id = ids[2].replace('profile', '');
	  var prm = {};
		  prm.method  = 'nbc.friend.delete';
		  prm.format  = 'json';
		  prm.profile_id = profile_id;
		  prm.friend_profile_id = friend_profile_id;

      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
	    function(data){
		  if (!data.success) return;
		  jQuery(_this).parents('.friend').fadeOut('slow');
		}, 
		'json'
      );
	});
  });

  jQuery('.magDeleteIgnored', dom).each(function(){
    if (this.diWalked) return;
	this.diWalked = true;

	jQuery(this).click(function(e){ 
      e.preventDefault();

      if (!confirm('Möchtest du diesen User wirklich von der Blockierliste entfernen?')){
	    return;
      }
      
      var user_id = jQuery(this).attr('href').replace('#user', '');	  
	  var prm = {};
		  prm.method  = 'nbc.ignorelist.deleteUser';
		  prm.format  = 'json';
		  prm.user_id = user_id;
		  
      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
	    function(data){
		  if (!data.success) return;
		  jQuery(_this).parents('.friend').fadeOut('slow');
		}, 
		'json'
      );
	});
  });
  
  jQuery('.magDeleteRequest', dom).each(function(){
    if (this.drWalked) return;
	this.drWalked = true;

	jQuery(this).click(function(e){ 
      e.preventDefault();

      if (!confirm('Möchtest du die Freundschaftsanfrage wirklich löschen?')){
	    return;
      }
      
      var ids = jQuery(this).attr('href').split('#');
	  var invite_key = ids[1].replace('invitekey', '');
	  var profile_id = ids[2].replace('profile', '');
	  var prm = {};
		  prm.method  = 'nbc.friend.deleteRequest';
		  prm.format  = 'json';
		  prm.invite_key = invite_key;
		  prm.profile_id = profile_id;

      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
	    function(data){
		  if (!data.success) return;
		  jQuery(_this).parents('.friend').fadeOut('slow');
		}, 
		'json'
      );
	});
  });

  jQuery('.magAcceptRequest', dom).each(function(){
    if (this.arWalked) return;
	this.arWalked = true;

	jQuery(this).click(function(e){ 
      e.preventDefault();

      if (!confirm('Möchtest du die Freundschaftsanfrage wirklich akzeptieren?')){
	    return;
      }
      
      var ids = jQuery(this).attr('href').split('#');
	  var invite_key = ids[1].replace('invitekey', '');
	  var profile_id = ids[2].replace('profile', '');
	  var prm = {};
		  prm.method  = 'nbc.friend.acceptRequest';
		  prm.format  = 'json';
		  prm.invite_key = invite_key;
		  prm.profile_id = profile_id;

      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
	    function(data){
		  if (!data.success) return;
		  jQuery(_this).parents('.friend').fadeOut('slow');
		}, 
		'json'
      );
	});
  });

  jQuery('.magRejectRequest', dom).each(function(){
    if (this.rrWalked) return;
	this.rrWalked = true;

	jQuery(this).click(function(e){ 
      e.preventDefault();

      if (!confirm('Möchtest du die Freundschaftsanfrage wirklich ablehnen?')){
	    return;
      }
      
      var ids = jQuery(this).attr('href').split('#');
	  var invite_key = ids[1].replace('invitekey', '');
	  var profile_id = ids[2].replace('profile', '');
	  var prm = {};
		  prm.method  = 'nbc.friend.rejectRequest';
		  prm.format  = 'json';
		  prm.invite_key = invite_key;
		  prm.profile_id = profile_id;

      var _this = this;
      jQuery.post(nbc.SERVICE_URL, prm,
	    function(data){
		  if (!data.success) return;
		  jQuery(_this).parents('.friend').fadeOut('slow');
		}, 
		'json'
      );
	});
  });

  jQuery('.magAutocomplete', dom).each(function() 
  { 
    if (this.aWalked) return;
	this.aWalked = true;

    new nbc.Autocomplete(this); 
  });

  jQuery('.magAutocompleteMulti', dom).each(function() 
  { 
    if (this.amWalked) return;
	this.amWalked = true;

    new nbc.AutocompleteMulti(this); 
  });

  jQuery('.magAmazon', dom).each(function() 
  { 
    if (this.azWalked) return;
	this.azWalked = true;

    new nbc.Amazon(this); 
  });
  
  jQuery('.magCommentable', dom).each(function() 
  { 
    if (this.cWalked) return;
    this.cWalked = true;

    new nbc.Commentable(this); 
  });

  jQuery('.magCollapse', dom).each(function() 
  { 
    if (this.clWalked) return;
	this.clWalked = true;
  
	new nbc.Collapse(this); 
  });
  
  jQuery('.magLikeable', dom).each(function() 
  { 
    if (this.lWalked) return;
    this.lWalked = true;

    new nbc.Likeable(this); 
  });

  jQuery('a.magAJAXLink', dom).each(function() 
  { 
    if (this.alWalked) return;
    this.alWalked = true;

    var href = jQuery(this).attr('href');
    jQuery(this).attr('href', '#' + href);

    jQuery(this).click(function(e)
    {
      e.preventDefault();

      var _this = this;
      jQuery.post(nbc.SERVICE_URL + href, { format: 'json' },
        function(data)
        {
          if (_this.className.indexOf('OnSuccessRemoveParent') > -1) {
            jQuery(_this.parentNode).remove();
          }

          if (data.usermsg)
          {
            jQuery.modal('<div class="modalmsg"><h1>Hinweis</h1><p>' + data.usermsg + '</p></div>');
          }
        }, 
        'json'
      );
    });
  });
}

jQuery(document).ready(function()
{
  // Navi abklappern
  jQuery('#nbNav2 li a').each(function(idx, lk) {
      //if (location.pathname.indexOf(jQuery(lk).attr('href')) == 0) {
      if (location.pathname == jQuery(lk).attr('href')) {
        jQuery(lk.parentNode).addClass('nbNav2On').removeClass('nbNav2Off');
      } else {
        jQuery(lk.parentNode).addClass('nbNav2Off').removeClass('nbNav2On');
      }
  });
 
  // Ausserhalb der Community benoetigen wir nur Commentables
  if (location.pathname.indexOf('/community') !== 0)
  {
    jQuery('.magCommentable', document).each(function() 
    { 
      if (this.cWalked) return;
      this.cWalked = true;

      new nbc.Commentable(this); 
    });
    return;
  } 

  jQuery('#compose_post').each(function() { new nbc.Postable(this); });
  nbc.Walk(document);
  jQuery('.magLoadMore').each(function()
  {
    var _this = this;
    if (!window.lmWalked)
    {
      jQuery(window).scroll(function(e) 
      {
        var fold = jQuery(this).height() + jQuery(this).scrollTop();
        var visible = fold > jQuery(_this).offset().top;
        if (visible) { jQuery(_this).click(); }
      });

      window.lmWalked = true;
    }

    jQuery(this).click(function(e)
    {
      e.preventDefault();
      if (this.blocked) return;

      this.page = this.page || 1;
      this.per_page = this.per_page || 20;
      this.blocked = true;

      var _this = this;
      jQuery.post(location.href, { skip_layout: true, page: this.page + 1, per_page: this.per_page },
        function(html)
        {
          if (jQuery.trim(html) == '' || html.match(/<body>/))
          {
            jQuery(_this).hide();
            return;
          }

          jQuery(html).insertBefore(_this);
          nbc.Walk(_this.parentNode);
          _this.page++;
          _this.blocked = false;
        }, 
        'text'
      );
    });
  });
});

