var Comments = new Class({
   
	Implements:Options,	
	options:{
			form : 'CommentsForm',
			url: null,
			RemoveItemsList : '#CommentsList .del',
			EditItemList : '.editable .cm1',
			MaxWords: 2000,
			MinEditItemHeight:200,
			aDuration: 1000,
			aTransition: Fx.Transitions.Pow.easeOut,
			TagsList: 'CommentsTagsList'
	},
		
	initialize:function(options){		
			this.setOptions(options);		
			this.initComments();
			
	},
	initComments:function(){
			this.GetEditItemList();
			this.GetRemoveItemList();
			this.HelpSlider();
			$('PostValue').addEvent('keydown', function(){
				this.MaxLength($('PostValue'));
				this.DisableEnable($('PostValue'));
			}.bind(this));
			$('PostValue').addEvent('change', function(){
				this.DisableEnable($('PostValue'));
			}.bind(this));
	},	
	MaxLength:function(el){
			if (el.value.length > this.options.MaxWords){
				DisplayMessage("Dozwolona wielkość wypowiedzi to " + this.options.MaxWords + " znaków");
				el.value = el.value.substr(0,this.options.MaxWords);
			}   
	},	
	DisableEnable:function(el){
			if (el.value.length < 2){
					$('btn_preview_comment').disabled=true;
					$('btn_post_comment').disabled=true;
			}else{
					$('btn_preview_comment').disabled=false;
					$('btn_post_comment').disabled=false;
			}
	},	
	fadePost: function(el){
		if(el){
			el.get('morph',{duration: this.options.aDuration,  transition: this.options.aTransition, wait:true,
				   onComplete: function() {el.dispose(); 
				   //$('BodyContent').removeClass('waiting');
				   }			
			}).start({'height':0, 'padding':'0 10px', 'margin-top':0});
			el.fade(0)
		}
	},
	GetRemoveItemList:function(){
			$$(this.options.RemoveItemsList).each(function (el) {
				el.addEvent('click', function(e){e.stop();this.RemoveItem(el);}.bind(this));
			},this);
	},
	GetEditItemList:function(){
			$$(this.options.EditItemList).each(function (el) {
				el.addEvent('dblclick', function(e){e.stop();this.EditItem(el);}.bind(this));
			},this);
	},	
	RemoveItem:function(el){
			var el = el.getParent();	
			//if(confirm("Jesteś pewien że chcesz usunąć ten wpis?")){			
				var DelRequest = new Request({	
					url			:  this.options.url,
					method		: 'post',
					onRequest	: function() {
						//$('BodyContent').addClass('waiting');
						}.bind(this),
					onSuccess 	: function(response) {
						if(response=='success') this.fadePost(el);
						else DisplayMessage(response);
					}.bind(this),
					onFailure 	: function() { DisplayMessage('Error'); }.bind(this)		
				}).send("id=" + el.get('id').replace('comment-','') + "&Action=Remove");	
			//}
	},
	EditItem:function(el){
			var before = el.get('text').trim();
			var height =  el.getSize().y;	
			el.set('html','');	
			if(el.hasClass('cm1')){
				var input = new Element('textarea', {'class':'box', 'text':before });				
				if(height>this.options.MinEditItemHeight) input.setStyle('height',height);
				input.addEvent('keydown', function(){this.MaxLength(input);}.bind(this));
			}
			input.inject(el).select();
			input.addEvent('blur', function() {var after = input.get('value').trim(); this.SaveItem(el,before,after);}.bind(this));
	},
	SaveItem:function(el,before,after){	
		//	if(confirm("Chcesz zapisać zmiany?")){			
				var SaveRequest = new Request({	
					url			:  this.options.url,
					method		: 'post',
					onRequest	: function() {
						//$('BodyContent').addClass('waiting');
						}.bind(this),
					onSuccess 	: function(response) {						
						if(response == 'Brak komentarza') {
							el.addClass('editable-empty');
							//DisplayMessage('Brak komentarza');
						}else {
							el.set('html',response);
							el.removeClass('editable-empty');
						}	
						
					}.bind(this),
					onFailure 	: function() { DisplayMessage('Error'); }.bind(this)		
				}).send('id=' + el.get('id').replace('cm-','') + '&Action=Save&PostValue=' + after);	
			//}else{
		//		el.set('text',before).trim();
		//	}
	},
	HelpSlider:function(){
			var help = $(this.options.TagsList);
			var tags = $('Tags');
			var tagSlide = new Fx.Slide(help, {
				duration: this.options.aDuration,  transition: this.options.aTransition,
				onComplete: function(){
					tags.fade(1);
				//	$('BodyContent').removeClass('waiting');
					  if(tagSlide.open){				  
						tags.set('text','Zamknij listę tagów');	
						tags.removeClass('hidden').addClass('open');				 
						 help.fade(1);
					  }else{ 
						help.fade(0);
						tags.set('text','Jak mogę sformatować swój komentarz?');
						tags.removeClass('open').addClass('hidden');	
					  }
				}
			}).hide();
			help.fade(0);
			tags.addEvent('click', function(e) {
				e.stop();
			//	$('BodyContent').addClass('waiting');
				help.setStyle('display', 'block');
				tagSlide.toggle();
				help.fade(0);
				tags.fade(0);
			});
			
			
			$('btn_preview_comment').addEvent('click', function(e) {							
				e.stop();	
				
				var prevka = $$('#CommentsList .Preview');
					prevka.each(function(el){
						this.fadePost(el);
					}.bind(this));			
				$('Action').value = 'Preview';			
		///////////////////////////////	
		
			var myRequest = new Request({
				url: this.options.url,
				method: 'post',
				onRequest: function(){			
				tagSlide.slideOut();
				    $('btn_preview_comment').getParent().fade(0); // PREVIEW
					//$('btn_post_comment').fade(0); // ADD POST
				}.bind(this),
				onSuccess: function(response) {
				 $('btn_preview_comment').getParent().fade(0,1); // PREVIEW
				// $('btn_post_comment').fade(0,1); // ADD POST
				 if(response == 'Brak komentarza') {				
						DisplayMessage('Brak komentarza');
				}else{	
					 var post = new  Element('li', {'class':'post', 'html':response }).injectInside($('CommentsList'));	
					 //$('PostValue').value = '';	// ADD POST
					 post.addClass('Preview'); // PREVIEW
					 post.fade(0,1);
					  post.highlight('#222222','#111111');
				}
				 this.GetRemoveItemList();	// ADD POST
				 this.GetEditItemList();	// ADD POST
				}.bind(this),
				onFailure: function(){	
				    DisplayMessage('Wystąpił bład');
				    $('btn_preview_comment').getParent().fade(1); 
					$('Comments').fade(1); 
				}.bind(this)
			}).send($(this.options.form));
			}.bind(this));
		
		
			$('btn_post_comment').addEvent('click', function(e) {
				e.stop();	
				var prevka = $$('#CommentsList .Preview');
					prevka.each(function(el){
						this.fadePost(el);
					}.bind(this));			
				$('Action').value = 'Post';
		//////////////////////////////////////////////	
			var myRequest = new Request({
				url: this.options.url,
				method: 'post',
				onRequest: function(){			
				tagSlide.slideOut();
				   // $('btn_preview_comment').fade(0); // PREVIEW
					$('btn_post_comment').getParent().fade(0); // ADD POST
				}.bind(this),
				onSuccess: function(response) {
				// $('btn_preview_comment').fade(0,1); // PREVIEW
				 $('btn_post_comment').getParent().fade(0,1); // ADD POST
				 if(response == 'Brak komentarza') {				
						DisplayMessage('Brak komentarza');
				}else{	
					 var post = new  Element('li', {'class':'post', 'html':response }).injectInside($('CommentsList'));	
					$('PostValue').value = '';	// ADD POST
					$('btn_post_comment').disabled=true;
					$('btn_preview_comment').disabled=true;
					// post.addClass('Preview'); // PREVIEW
					 post.fade(0,1);
					 post.highlight('#222222','#111111');
				}
				 this.GetRemoveItemList();	// ADD POST
				// this.GetRemoveItemList();	// ADD POST
				}.bind(this),
				onFailure: function(){	
				    DisplayMessage('Wystąpił bład');
				    $('btn_post_comment').getParent().fade(1); 
					$('Comments').fade(1); 
				}.bind(this)
			}).send($(this.options.form));
			}.bind(this));

	}
}); 
