/*
 * Layout manager
 */
var lManager = {

    jQuery : $,

    settings : {
      columns : '.column',
      widgetSelector: '.widget',
      handleSelector: '.ctr',
      dragSelector: '.h',
      contentSelector: '.c, .b',
      widgetDefault : {
        movable: true,
        removable: true,
        collapsible: true,
        editable: true
      }
    },

    init : function () {
        this.addWidgetControls();
        this.makeSortable();
    },

    getWidgetSettings : function (id) {
        var $ = this.jQuery,settings = this.settings;
        return settings.widgetDefault;
    },

    addWidgetControls : function () {
      var lManager = this,
          $ = this.jQuery,
          settings = this.settings;

      $(settings.widgetSelector, $(settings.columns)).each(function () {
        var thisWidgetSettings = lManager.getWidgetSettings(this.id);
        //if (thisWidgetSettings.removable) {
        if ( $(this).find('.g').length != 1 ) {
          $('<span class="delete"><!-- --></span>').mousedown(function (e) {
            e.stopPropagation();
          }).click(function () {
            $(this).parents(settings.widgetSelector).animate({
              opacity: 0
            },function () {
              $(this).find('.component').wrap('<div/>').parent().slideUp(function () {
				$(this).parents(settings.widgetSelector).remove();
                if($(this).remove() ){
                  lManager.savePreferences();
                }
              });
            });
            return false;
          }).appendTo($(settings.handleSelector, this));
        } 

        //if (thisWidgetSettings.editable) {
        if ( $(this).find('.e').length == 1 ) {
          $('<span class="edit"><!-- --></span>').mousedown(function (e) {
              e.stopPropagation();
          }).toggle(function () {
              $(this).parents(settings.widgetSelector)
                         .find('.e').slideDown();
              return false;
          },function () {
              $(this).parents(settings.widgetSelector)
                         .find('.e').slideUp();
              return false;
          }).appendTo($(settings.handleSelector,this));
        }

        if (thisWidgetSettings.collapsible) {
          $('<span class="collapse"><!-- --></span>').mousedown(function (e) {
            e.stopPropagation();
          }).toggle(function () {
            $(this).addClass('collapsed')
                   .parents(settings.widgetSelector)
                   .find(settings.contentSelector).slideToggle();
              $(this).parents(settings.widgetSelector)
						 .animate({'paddingBottom':'10px'},500);
            return false;
          },function () {
            $(this).removeClass('collapsed')
                   .parents(settings.widgetSelector)
                   .find(settings.contentSelector).slideToggle();
              $(this).parents(settings.widgetSelector)
						 .animate({'paddingBottom':'0'},500);
            return false;
          }).appendTo($(settings.handleSelector, this));
        }

      });


    },

    makeSortable : function () {
        var lManager = this,
            $ = this.jQuery,
            settings = this.settings,
            $sortableItems = (function () {
              return $('li.sort', settings.columns);
            })();

      $sortableItems.find(settings.dragSelector).css({
        cursor: 'move'
      }).bind('mousedown',function (e) {
        $sortableItems.css({width:''});
        $(this).parent().css({
            width: $(this).parent().width() + 'px'
        });
      }).bind('mouseup',function () {
        if(!$(this).parent().hasClass('dragging')) {
			var test = $(this).parent();
			setTimeout(function() {
				test.css({
					width:'100%'
				});
                                lManager.savePreferences()
			},500);
        } else {
          $(settings.columns).sortable('disable');
        }
        
      });

      $(settings.columns).sortable({
        items: $sortableItems,
        connectWith: $(settings.columns),
        handle: settings.dragSelector,
        placeholder: 'widget-placeholder',
        forcePlaceholderSize: true,
        revert: 300,
        delay: 100,
        opacity: 0.8,
        containment: 'document',
        start: function (e,ui) {
          $(ui.helper).addClass('dragging');
        },
        stop_end: function (e,ui) {
          $(ui.item).css({width:'33%'}).removeClass('dragging');
          $(settings.columns).sortable('enable');
          lManager.savePreferences();
        },
		beforeStop: function() {
			console.log('jep');
		}
      });
    },

	savePreferences : function () {
      var lManager = this,
          $ = this.jQuery,
          settings = this.settings,
          data = '';

      /* Assemble the cookie string */
      $(settings.columns).each(function(i){
         data += ( i === 0 ) ? '' : '|';
         $(settings.widgetSelector,this).each(function(i){
           /* ID of widget: */
           data += $(this).attr('id') + ',';
        });
      });
//alert(data);
      $.post('ajax/ajax_savewidgets.php', { 'widgets' : data } );
    }

};

$(document).ready(function() {
	lManager.init();
});
