/**
 *
 * @package actra.development ASNetworks GmbH Pinboard
 * @version SVN: $Id: pinboard.js 52 2008-08-12 07:24:15Z gabriel $
 *
 * @author Gabriel Schuster <info@actra.de>
 * @copyright Copyright 2008, actra.development, Korntal-Muenchingen
 *
 * Legal disclaimer:
 * This software is provided as-is, without any warranty, without even the implied warranty of merchantability or
 * fitness for a particular purpose.
 * This file and any parts of it are copyright protected. All copyrights, written and unwritten, belong to actra.development.
 * You are not allowed to use this file as whole or in parts for any other projects without a prior, written license.
 * Please contact actra.development to gather a license.
 *
 * Contact:
 *      actra.development
 *      Owner: Gabriel Schuster
 *      Schwabstrasse 2
 *      70825 Korntal-Muenchingen
 * Web & eMail:
 *      http://www.actra.de/velopment
 *      info@actra.de
 *
 */


function loadPinboardEntries(newEntryID) {
      if(window.ajaxRequestActive == true)
      {
            setTimeout(function() { window.loadPinboardEntries(newEntryID); }, 500);
            
            return;
      }

      $.blockUI('<h1 class="pinboardBlockUI" id="pinboardBlockUI-user' + window.pinboardID + '">Lade Notizen, einen Moment bitte...</h1>');
      
      window.ajaxRequestActive = true;
      $.ajax({
            type:        'POST',
            url:         window.pinboardURL,
            async:       true,
            cache:       false,
            timeout:     15000,
            dataType:    'json',
            data:        'action=loadEntries',
            processData: false,
            success:     function(entries, statusText) {
                  window.ajaxRequestActive = false;
                  
                  window.$('div.pinboardEntry').each(function() {
                        $(this).draggable('destroy');
                        $(this).remove();
                  });
                  //window.$('div.pinboardEntry').remove();
                  window.$('div.pinboardContentContainer').html('&nbsp;');
                  window.$('div.pinboardContentContainer').empty();
                  for(i = 0; i < entries.length; i++) {
                        var entry     = entries[i];
                        var entryHTML = '<div class="pinboardEntry" id="pinboardEntry-user' + window.pinboardID + '-entry' + entry.id + '" style="width: ' + entry.width +
                                        'px; height: ' + entry.height + 'px; position: absolute; top: ' + entry.top + 'px; left: ' + entry.left + 'px; background-image: url(\'' +
                                        entry.url + '\'); z-index: ' + (501 + i) + '; float: left; clear: none;"><div class="pinboardEntryZoom" id="pinboardEntryZoom-user' +
                                        window.pinboardID + '-entry' + entry.id + '">&nbsp;</div></div>';
                        
                        window.$('div.pinboardContentContainer').append(entryHTML);
                        
                        window.$('div#pinboardEntryZoom-user' + window.pinboardID + '-entry' + entry.id).bind('click', {entry: entry, pinboardID: window.pinboardID}, displayBigImage);
                        window.$('div#pinboardEntry-user' + window.pinboardID + '-entry' + entry.id).bind('click', {entry: entry, pinboardID: window.pinboardID}, bringToFront);
                        window.$('div#pinboardEntry-user' + window.pinboardID + '-entry' + entry.id).draggable({
                              containment: window.$('div.pinboardContentContainer'),
                              cursor:      'move',
                              helper:      'original',
                              distance:    1,
                              scroll:      false,
                              zIndex:      function() {
                                    return bringToFront({data: {entry: entry, pinboardID: window.pinboardID}});
                              },
                              start:       function(e, ui) {
                                    bringToFront({data: {ui: ui, entry: entry, pinboardID: window.pinboardID} });
                              },
                              stop:        function(e, ui) {
                                    if(newEntryID && newEntryID.length && 'pinboardEntry-user' + window.pinboardID + '-entry' + newEntryID == ui.helper.attr('id')) {
                                          updatePinboardEntry(newEntryID, ui);
                                    }
                              }
                        });
                  }
                  
                  $.unblockUI();
            }
      });
      
      return false;
}


function reloadPinboardEntries(newEntryID) {
      $.unblockUI();
      
      setTimeout(function() { loadPinboardEntries(newEntryID); }, 100);
}


function displayBigImage(event) {
      var entry    = event.data.entry;
      var bigImage = '<div style="width: ' + entry.widthB + 'px; height: ' + entry.heightB + 'px; background-image: url(\'' + entry.urlBig + '\'); float: none; '+
                     'clear: both;" id="pinboardEntryBigImage-user' + event.data.pinboardID + '-entry' + entry.id + '">&nbsp;</div>';
      bigImage += '<div style="text-align: left; float: none; clear: both; margin: 10px 0px 0px 0px;">Angepinnt';
      if(entry.name && entry.name.length) {
            var name = entry.name;
            if(entry.email && entry.email.length) {
                  name = '<a href="mailto:' + entry.email + '">' + name + '</a>';
            }
            
            bigImage += ' von '+name;
      }
      bigImage += ' am ' + entry.date + ' um ' + entry.time + '</div>';
      
      if(entry.website && entry.website.length) {
            bigImage += '<div style="text-align: left; float: none; clear: both;">Website: <a href="' + entry.website + '" target="_blank">' + entry.website +
                        '</a></div>';
      }
      
      bigImage += '<div class="pinboardEntryClose" id="pinboardEntryClose-user' + window.pinboardID + '-entry' + entry.id+'"><span ' +
                  'class="pinboardEntryCloseSpan" id="pinboardEntryCloseSpan-user' + window.pinboardID + '-entry' + entry.id+'"onClick="$.unblockUI(); ' +
                  '$(\'div.pinboardEntryBigImageToolTip\').each(function(i, elem) { $(elem).remove(); });">Schlie&#223;en</span></div>';
      
      $.blockUI(bigImage, { width: entry.widthB + 'px', margin: '-' + (Math.round(entry.heightB / 2) + 70) + 'px 0 0 -' + Math.round(entry.widthB / 2) + 'px' });
      
      $('div#pinboardEntryBigImage-user' + event.data.pinboardID + '-entry' + entry.id).hover(
            function(e) {
                  $('body').append('<div class="pinboardEntryBigImageToolTip" id="pinboardEntryBigImageToolTip-user' + event.data.pinboardID + '-entry' + entry.id + '">' + entry.comment +
                     '</div>');
                  $('div#pinboardEntryBigImageToolTip-user' + event.data.pinboardID + '-entry' + entry.id)
                        .css('top', (e.pageY - 10) + 'px')
                        .css('left', (e.pageX + 20) + 'px')
                        .fadeIn('fast');
            },
            function() {
                  $('div.pinboardEntryBigImageToolTip').each(function() { $(this).remove(); });
            }
      );
      $('div#pinboardEntryBigImage-user' + event.data.pinboardID + '-entry' + entry.id).mousemove(function(e){
            $('div#pinboardEntryBigImageToolTip-user' + event.data.pinboardID + '-entry' + entry.id)
                  .css('top', (e.pageY - 10) + 'px')
                  .css('left', (e.pageX + 20) + 'px');
      });
}


function bringToFront(event) {
      var entry      = event.data.entry;
      var pinboardID = event.data.pinboardID;
      var element    = event.data.ui ? $('div#' + event.data.ui.helper.attr('id')) : $('div#pinboardEntry-user' + pinboardID + '-entry' + entry.id);
      
      var count = 0;
      window.$('div#pinboardContentContainer-user' + pinboardID + ' > div.pinboardEntry').each(function() {
            if(this.id != $(element).attr('id')) {
                  if($(this).css('zIndex') >= $(element).css('zIndex')) {
                        $(this).css('zIndex', parseInt($(this).css('zIndex') - 1));
                        count++;
                  }
            }
      });
      
      $(element).css('zIndex', parseInt(500 + $('div#pinboardContentContainer-user' + pinboardID + ' > div.pinboardEntry').length));
      
      return parseInt($(element).css('zIndex'));
}


function addPinboardEntry() {
      var iframe = '<iframe src="' + window.pinboardURL + '?action=getEntryForm" scrolling="no" frameborder="0" hidefocus="true" '+
                   'class="pinboardEntryIFrame" id="pinboardEntryIFrame-user' + window.pinboardID + '" />';
      
      $.blockUI(iframe, { width: '400px', height: '350px', margin: '-175px 0 0 -200px' });
}


function uploadImage() {
      if(!$('input.pinboardImage') || !$('input.pinboardImage').val().length) {
            alert("Bitte w\xE4hlen Sie ein Bild.");
            
            return false;
      }
      if(!$('input.pinboardComment') || !$('input.pinboardComment').val().length) {
            alert('Bitte geben Sie eine Notiz ein.');
            
            return false;
      }
      if(!$('input.pinboardName') || !$('input.pinboardName').val().length) {
            alert('Bitte geben Sie einen Namen ein.');
            
            return false;
      }
      if($('input.pinboardComment').val().length > 250) {
            alert('Ihre Notiz darf maximal 250 Zeichen lang sein.');
            
            return false;
      }
      
      $('input.pinboardSubmit').attr('disabled', true);
      
      return true;
}


function previewEntry() {
      $('input.pinboardSubmit').attr('disabled', true);
      
      $('input#inputAction').val('previewEntry');
      $('FORM#pinboardEntryForm-user' + window.pinboardID).submit();
      
      return;
}


function submitEntry() {
      $('input.pinboardSubmit').attr('disabled', true);
      
      $('input#inputAction').val('submitEntry');
      $('FORM#pinboardEntryForm-user' + window.pinboardID).submit();
      
      return;
}


function updatePinboardEntry(entryID, uiObj) {
      if(window.ajaxRequestActive == true)
      {
            setTimeout(function() { updatePinboardEntry(entryID, uiObj); }, 500);
            
            return;
      }
      
      $.blockUI('<h1 class="pinboardBlockUI" id="pinboardBlockUI-user' + window.pinboardID + '">Speichere Position, einen Moment bitte...</h1>');
            
      window.ajaxRequestActive = true;
      $.ajax({
            type:        'POST',
            url:         window.pinboardURL,
            async:       true,
            cache:       false,
            timeout:     15000,
            dataType:    'json',
            data:        'action=updateEntry&id=' + entryID + '&x=' + uiObj.position.left + '&y=' + uiObj.position.top,
            processData: false,
            success:     function(data, statusText) {
                  window.ajaxRequestActive = false;
                  
                  if(data.status == 'saved') {
                        $.blockUI('<h1 class="pinboardBlockUI" id="pinboardBlockUI-user' + window.pinboardID + '">Die Position wurde gespeichert.</h1>');
                  }
                  else {
                        $.blockUI('<h1 class="pinboardBlockUI" id="pinboardBlockUI-user' + window.pinboardID + '">Die Position konnte nicht gespeichert werden.</h1>');
                  }
                  
                  setTimeout(function() { $.unblockUI(); }, 1000);
            }
      });
      
      return false;
}
