// $Id$
// author: olk olk2@mail.ru (aka - Helg@drupal.org)
(function ($) {
Drupal.behaviors.ccfcollapse = {
   attach: function (context, settings) {
   $('.ccfcollapse-wrapper').once('ccfcollapse-wrapper', function () {
     var $ccfw=$(this);
     var $body_wrapper=$('> .ccfcollapse-wrapper-body', this);
     var $th =$('> .ccfcollapse-wrapper-title-hide:first', this);
     var $ts =$('> .ccfcollapse-wrapper-title-show:first', this);
   	 var $lh = $('<a class="ccfcollapse-wrapper-link-collapse-all" href="#" alt="'+$th.contents().text()+'"></a>').prepend($th.contents()).appendTo($th)
   	 .click(function() {
        $body_wrapper.
        find('.ccfcollapse-link-collapse:not(.hide)')
   	 	  .each( function(indx,element){
  	 	  $(this).triggerHandler('click');
   	 	  });
        $th.hide();
        $ts.show();
   	 	 return false;
   	 });
   	 var $ls = $('<a class="ccfcollapse-wrapper-link-expand-all" href="#" alt="'+$ts.contents().text()+'"></a>').prepend($ts.contents()).appendTo($ts)
    	 .click(function() {
        $body_wrapper.
        find('.ccfcollapse-link-expand:not(.hide)')
   	 	  .each( function(indx,element){
  	 	  $(this).triggerHandler('click');
   	 	  });
    	  $ts.hide();
    	  $th.show();
   	 	 return false;
   	 });
   	 if ($ccfw.hasClass('hide')) {
   	 	  $ts.show();
   	 }
   	 else {
        $th.show();
   	 }
   });

   $('.ccfcollapse').once('ccfcollapse', function () {
     var $ccf=$(this);
     var $th =$('> .ccfcollapse-title-hide', this);
     var $ts =$('> .ccfcollapse-title-show', this);
     var $static_title =$('> .ccfcollapse-static-title', this);
     var $body = $('> .ccfcollapse-body', this);
     var speed_hide = $("> input[name='speed-hide']", this).val();
     var method_hide = $("> input[name='method-hide']", this).val();
     var speed_show = $("> input[name='speed-show']", this).val();
     var method_show = $("> input[name='method-show']", this).val();
     var is_unpublis_node = $("> input[name=is-unpublish-node]",this).val();
     var nid = $("> input[name='node-nid']", this).val();
     $static_title.hide();
     // ссылка на свертывание
   	   var $lh = $('<a class="ccfcollapse-link-collapse" href="#" alt="'+$th.contents().text()+'"></a>')
 	     .prepend($th.contents())
 	     .appendTo($th)
   	   .click(function() {
   	   	   var ccfc = $body.get(0);
          if (!ccfc.animating)  {
         	Drupal.ccfcollapseToggler(ccfc,speed_hide,method_hide,'hide');
           $th.hide().addClass('hide').find('a').addClass('hide');
           $ts.show().removeClass('hide').find('a').removeClass('hide');
        	}
    	 	 return false;
     	 });
     // ссылка на развертывание
    	var $ls = $('<a class="ccfcollapse-link-expand" href="#" alt="'+$ts.contents().text()+'"></a>')
    	 .prepend($ts.contents())
    	 .appendTo($ts)
    	 .click(function() {
    	 	  var ccfc = $body.get(0);
          if (!ccfc.animating)  {
           if($ts.hasClass('ajax_node') && !$ts.hasClass('processed') && !$ts.hasClass('loadded')) {
            $body.find('.ccfcollapse-ajax-body').empty();
            Drupal.ccfcollapseLoadNode($body,$ts,$th,nid,ccfc,speed_show,method_show,is_unpublis_node);
           }
           else {
           Drupal.ccfcollapseToggler(ccfc,speed_show,method_show,'show');
           $th.show().removeClass('hide').find('a').removeClass('hide');
           $ts.hide().addClass('hide').find('a').addClass('hide');
           }

         	}
     	 	 return false;
   	   });

   	   if ($ccf.hasClass('hide')) {
 	   	 $body.hide();
   	   $ts.show().removeClass('hide').find('a').removeClass('hide');
   	   $th.hide().addClass('hide').find('a').addClass('hide');
         if($ts.hasClass('ajax_node')) {
     	     $ts.find('a').before('<span class="ccfcollapse-ajax-processed">&nbsp;</span>');
           $ts.find('.ccfcollapse-ajax-processed').hide();
   	     }
   	    }
     	 else {
       if($ts.hasClass('ajax_node') && !$ts.hasClass('processed') && !$ts.hasClass('loadded')) {
            $ts.find('a').before('<span class="ccfcollapse-ajax-processed">&nbsp;</span>');
            Drupal.ccfcollapseLoadNode($body,$ts,$th,nid,'','','start',is_unpublis_node);
            }
     	 $ts.hide().addClass('hide').find('a').addClass('hide');
     	 $th.show().removeClass('hide').find('a').removeClass('hide');
     	 $body.show();
     	 }
      });
  }
};

Drupal.ccfcollapseLoadNode = function(body,ts,th,nid,ccfc,speed_show,method_show,is_unpublis_node) {
    var action = 'http://' + window.location.hostname +'/ccfcollapse/js_load_node/'+nid+'/'+is_unpublis_node;
    $(ts).find('.ccfcollapse-ajax-processed').show();
    $(ts).addClass('processed');
    $.ajax({
    type: "GET",
    url: action,
    dataType: "json",
    success: function(result) {
      if (result['status']) {
//      	var text=result['data'];
        var text=result['data']['text'];
        var title=result['data']['title'];
        var publish=result['data']['publish'];
//        if(title && is_title_node==1) {
//        $(body).parent().find('.ccfcollapse-title-allow').append('&nbsp;<span class="ccfcollapse-node-title">'+title+'</span>').show();
//        }
        if(is_unpublis_node == 1 || publish==1) {
      	$(body).find('.ccfcollapse-ajax-body').replaceWith(text);
        }
        else {
        $(body).find('.ccfcollapse-ajax-body').replaceWith(Drupal.t('This node is unpublished'));
        }
      	Drupal.attachBehaviors($(body));
      }
      else {
      	$(body).find('.ccfcollapse-ajax-body').replaceWith(Drupal.t('Error loading node'));
      }

    },
    error: function(result) {
         $(body).find('.ccfcollapse-node-title').empty();
         $(body).find('.ccfcollapse-ajax-body').replaceWith(Drupal.t('Error loading node'));

    },
    complete: function(result) {
       	$(ts).find('.ccfcollapse-ajax-processed').hide();
        if (method_show != 'start') {
    	   Drupal.ccfcollapseToggler(ccfc,speed_show,method_show,'show');
    	   }
         $(th).show().removeClass('hide').find('a').removeClass('hide');
         $(ts).hide().addClass('hide').find('a').addClass('hide');
         $(ts).find('.ccfcollapse-ajax-processed').hide();
         $(ts).removeClass('processed').addClass('loadded');
     }
  });
}

Drupal.ccfcollapseToggler = function(ccfc,speed,method,op) {
 ccfc.animating = true;

 if(op == 'show') {
 	 var method_show={height: 'show'};
 	 switch(method) {
 	 	case 'fade':
 	 	   method_show={opacity: 'show'};
 	 	   break;
 	 	case 'slidefade':
 	 	   method_show = {opacity: 'show', height: 'show'};
 	 	   break;
 	 }
   $(ccfc).animate(method_show, speed);
 }
 else {
 	 var method_hide={height: 'hide'};
 	 switch(method) {
 	 	case 'fade':
 	 	   method_hide={opacity: 'hide'};
 	 	   break;
 	 	case 'slidefade':
 	 	   method_hide={opacity: 'hide', height: 'hide'};
 	 	   break;
 	 }
   $(ccfc).animate(method_hide, speed);

 }
   ccfc.animating = false;
};

})(jQuery);
