/**
 * @author jfdesgagne
 */
var Comment = new Class({
  // 	Implements: Options,
  	table:null,
	openCommentEvent:null,
	sectionName:"",
	sectionId:null,
	
	
	
    initialize: function(table, sectionName, sectionId){
		//this.setOptions(options);
		this.table = table;
		this.sectionName = sectionName;
		this.sectionId = sectionId;
		this.initEvents();
		this.config();
    },
	
	config:function() {
		this.openCommentEvent = this.openComment.bindWithEvent(this);
	},
	
	initEvents:function() {
		this.table.getElements("tr td a").each(function(el) {
			el.refClass = this;
			el.addEvent('click', this.openComment);
		}, this); 
		
		if(this.table.getNext()) if(this.table.getNext().hasClass('giveOpinion')) {
			this.table.getNext().addEvent('click', this.addCommentForm.bindWithEvent(this));
		}		
	},
	
	removeEvents:function() {
		this.table.getElements("tr td a").each(function(el) {
			el.removeEvents('click');
		});
		if(this.table.getNext()) if(this.table.getNext().hasClass('giveOpinion')) {
			this.table.getNext().removeEvents('click');
		}
	},
	
	addCommentForm:function(event) {
		var tr = new Element('tr').addClass("addComment").inject(this.table.getFirst(), 'bottom');
		var td1 = new Element('td').inject(tr);
		var label1 = new Element('label', {'for':'comment'}).set('text', language[lang].commentMessage).inject(td1);
		var comment = new Element('textarea', {name:'comment', id:'comment', rows:4, cols:22}).inject(td1);
			comment.store('initHeight', comment.getHeight());
			comment.setStyles({
				'height':0,
				'width':'90%'
				
			});
			comment.set('morph', {
				duration: 'long',
				transition: Fx.Transitions.Expo.easeOut
			});
			comment.morph({
				'height': comment.retrieve('initHeight')
			});

		var td2 = new Element('td').inject(tr);
		var label2 = new Element('label', {'for':'name'}).set('text', language[lang].commentName).inject(td2);
		var name = new Element('input', {name:'name', id:'name', type:'text', size:12}).inject(td2);
		var label3 = new Element('label', {styles:{'margin-top':10}, 'for':'email'}).set('text', language[lang].commentEmail).inject(td2);
		var name = new Element('input', {name:'email', id:'email', type:'text', size:12}).inject(td2);
		
		var td3 = new Element('td').inject(tr);
		var date = new Element('p').set('text', '2008-07-18').inject(td3);

		event.target.set('text', language[lang].commentSaveComment);
		event.target.removeEvents('click');
		event.target.addEvent('click', this.saveClickHandler.bindWithEvent(this))
	},
	
	saveClickHandler:function(event) {
		var comment = this.table.getElement('tr td textarea');
		comment.set('morph', {
			onComplete:this.saveComment.bind(this)
		});
		comment.morph({
			'height': 0
		});	
		
		if(this.table.getNext().hasClass('giveOpinion')) {
			if (comment.get('value').length > 2) {
				this.table.getNext().destroy();
			} else {
				event.target.removeEvents('click');
				event.target.addEvent('click', this.addCommentForm.bindWithEvent(this));
			}
		}
	},
	
	saveComment:function() {
		var content_array = this.table.getFirst().getLast().getElements('td');
		var comment = content_array[0].getElement('textarea').get('value');
		var name = content_array[1].getElement('input').get('value');
		var email = content_array[1].getElements('input')[1].get('value');
		this.table.getFirst().getLast().destroy();
		if($$(".noComment")) $$(".noComment").destroy();
		
		if (comment.length > 2) {
			var injectWhere = this.table.getFirst();
			var tr = new Element('tr').inject(injectWhere, 'bottom')
			
			var td1 = new Element('td').addClass('commentText').inject(tr);
			var aComment = new Element('a', {
				href: "javascript://",
				title: comment
			}).set('text', comment.substring(0, 30) + "...").inject(td1);
			
			var td2 = new Element('td').inject(tr);
			if(email != "") {
				var aEmail = new Element("a", {href:"mailto:"+email}).set('text', name).inject(td2);
			} else {
				var pName = new Element('p').set('text', name).inject(td2);
			}
			
			var td3 = new Element('td').addClass('lastone').inject(tr);
			var date = new Element('p').set('text', language[lang].commentToday).inject(td3);
			

			this.saveAjaxComment({comment:comment, name:name, email:email, sectionName:this.sectionName, sectionId:this.sectionId});
			
			this.removeEvents();
			this.initEvents();
		}
	},
	
	saveAjaxComment:function(sendObject) {
		sendObject.callFunction = "saveComment";
		sendObject.lang = lang;
		
		new Request.JSON({
			"url":root+"assets/php/class.commentAjax.php",
			"method":"post"
		}).get(sendObject);			
	},
	
	openComment:function(event) {
		var tr = new Element('tr').inject(event.target.getParent().getParent(), "after");
		var td = new Element('td', {colspan:3}).addClass('lastone').inject(tr);
			td.setStyles({
				'padding-top':0,
				'padding-bottom':0
			});
			td.set('morph', {
				duration: 'long',
				transition: Fx.Transitions.Expo.easeOut
			});
			td.morph({
				'padding-top': 10,
				'padding-bottom': 30
			});
			
		var p = new Element('p').addClass('openedComment').set('text', event.target.get('title')).inject(td);
			p.store('initHeight', p.getHeight());
			p.setStyle('height', 0);
			p.set('morph', {
				duration: 'long',
				transition: Fx.Transitions.Expo.easeOut
			});
			
			p.morph({
				'height': p.retrieve('initHeight')
			});
			
		//alert(this.refClass.openComment);
		this.removeEvent('click', this.refClass.openComment);
		event.target.addEvent('click', this.refClass.closeComment);
	},
	
	destroyComment:function(event) {
		this.getParent().getParent().getNext().destroy();
		this.addEvent('click', this.refClass.openComment);
	},
	
	closeComment:function(event) {
		var p = event.target.getParent().getParent().getNext().getFirst().getFirst();
			p.set('morph', {
				onComplete:this.refClass.destroyComment.bindWithEvent(this)
			});
			p.morph({
				'height': 0,
				'margin-top':0
			});
		
		var td = event.target.getParent().getParent().getNext().getFirst();
			td.morph({
				'padding-top': 0,
				'padding-bottom':0
			});
			
		event.target.removeEvent('click', this.refClass.closeComment);		
	}
	
});