/*
 
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  @		     DEPRECATED            @
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  
*/

function saveArea(e){

	e.stop();
	var data = this.href.toQueryParams();
	var container = new Box("j-save-area-container", _("seguir lo que ocurre aquí"));

	var html = new Array();
	html.push('<div class=\"ajax-controls\"><p>');
	html.push(_("Esto sirve para que estés al tanto de lo que ocurre en <strong>#{0}</strong>. Cuando vuelvas a tu página lo podrás ver.", [data.name]));
	html.push('<br /><br /></p>');
	html.push('<form method=\"get\" action=\"/save-area\" id=\"save-area-form\">');
	html.push('<input type=\"hidden\" name=\"areaId\" value=\"'+ data.areaId +'\" />');
	html.push('<input type=\"hidden\" name=\"type\" value=\"'+ data.type +'\" />');
	html.push("<p class=\"clearfix button\">");		
	html.push("<input type=\"submit\" id=\"box_button\" value=\""+_("seguir lo que ocurre aquí")+"\" />");
	html.push("<span id=\"submitting\" style=\"display:none;\">");
	html.push("<img src=\"/static/imgs/ajax_activity_indicator.gif\" />");
	html.push(_("un momento..."));
	html.push("</span>");		
	html.push("</p>");
	html.push('</form>');
	
	$('j-save-area-container').update(html.join(""));
	
	$('save-area-form').observe('submit', function(){$('submitting').show();$('box_button').disabled = true;});
	
}

function removeArea(e){
	e.stop();
	var data = this.href.toQueryParams();
	var container = new Box("j-remove-area", _("borrar un lugar"));
	
	var html = new Array();
	html.push('<div class=\"ajax-controls\"><p>');
	html.push(_("Confirma que quieres dejar de saber lo que ocurre en <strong>#{0}</strong>.", [data.name]));
	html.push('<br /><br /></p>');
	html.push('<form method=\"get\" action=\"/remove-area\" id=\"remove-area-form\">');
	html.push('<input type=\"hidden\" name=\"areaId\" value=\"'+ data.areaId +'" />');
	html.push('<input type=\"hidden\" name=\"type\" value=\"'+ data.type +'\" />');
	html.push("<p class=\"clearfix button\">");		
	html.push("<input type=\"submit\" id=\"box_button\" value=\""+_("quitar")+"\" />");
	html.push("<span id=\"submitting\" style=\"display:none;\">");
	html.push("<img src=\"/static/imgs/ajax_activity_indicator.gif\" />");
	html.push(_("quitando sitio..."));
	html.push("</span>");		
	
	html.push('<a href="#" class="action cancel-form" id="j-remove-area-container-close">');
	html.push(_("cancelar"));
	html.push('</a>');
	
	html.push("</p>");
	html.push('</form>');
	
	$('j-remove-area').update(html.join(""));
	
	$('remove-area-form').observe('submit', function(){$('submitting').show();$('box_button').disabled = true;});

	$('j-remove-area-container-close').observe('click',function(e) {
		e.stop();
		$('container_j-remove-area').remove();
		$('overlay').remove();
	});

}

var ManageRelationship = {
	subject : "manage-relationship",
	url : "/manage-relationship",
	renderForm : function(e){

		var origin = Event.element(e);
		var flag = false;
		var data = new Object();

		if(origin.hasAttribute('src')){
			var link = origin.up();
			if(link.hasClassName('relationship')){
				flag = true;
				data = link.href.toQueryParams();
			}	
		}
		
		if(origin.hasClassName('relationship')){
			flag = true;
			data = origin.href.toQueryParams();
		}

		if(flag){
			e.stop();
			ManageRelationship.requestForm(data);
		}
	},
	renderFormAfterLogin : function(params){
		ManageRelationship.requestForm(params);
	},
	requestForm :function(params){
		var box = new Box(ManageRelationship.subject);
		params.ts =  new Date().getTime();
		var render = new Ajax.Request(ManageRelationship.url,{
			method: 'get',
			parameters: params,
			onSuccess: function(transport) {
				box.setContents(transport.responseText);
				$(ManageRelationship.subject + '-form').observe('submit', ManageRelationship.submitForm.bindAsEventListener(this, box));
			}
		});
	},
	submitForm: function(e, box){
		e.stop();
		
		$(ManageRelationship.subject + '-button').disabled = true;
		$('submitting').show();
		var data = e.element().serialize(true);
		data.ts = new Date().getTime();
		var submit = new Ajax.Request(ManageRelationship.url,{
			method: 'post',
			parameters: data,
			onSuccess: function(transport) {
			var response = transport.responseText.evalJSON();
			//1.- update stars
				$$('a.relationship[href="'+ ManageRelationship.url +'?u='+ data.guruId +'&a='+ data.authorId +'"]').each(
					function(node){
						ManageRelationship.update_link_attrs(node, data.relationship);
					});
			//2.- update nick-names
				if(!response.alias.blank()){
					$$('a.url[href$="/'+ data.guruSlug +'"]').each(function(node){node.update(response.alias);})
				}
			
			//3.- update views
				if(response.view == 'profile' || response.view == 'grabcontacts' || response.view == 'facebook-grabber'){
					if(!response.alias.blank()){
						if($('profile-title-nick')){
							$('profile-title-nick').update(response.alias);
						}
						if($('nickname_' + data.guruId)){
							$('nickname_' + data.guruId).update(response.alias);
						}
					}
					
					$$('a.relationship[href="'+ response.url +'"]').each(
						function(node){
							node.writeAttribute("title", false);
							var parent = node.up();
							var child = node.down();
							if(child != null && child.hasAttribute("src")){
								ManageRelationship.update_link_attrs(node, data.relationship);
							}
							if(parent != null && parent.hasClassName("rel-action-wrapper")){
								if(data.relationship != 0){
									parent.update(response.friendlyText + ' <a href="'+ response.url +'" class="action relationship">'+ response.linkText + '</a>');
								}else{
									parent.update('<a href="'+ response.url +'" class="action relationship">'+ response.linkText + '</a>');
								}
							}
						});
				}
				if(response.view == 'organize-contacts'){
					$('level-trust').update(response.friendlyText);
					if(data.relationship == 0)
						Ctr.updateWareHouse('delete');
				}				
				
				if(response.view == 'facebook-grabber'){
					if(data.relationship === 0){
						$('fb-user-' + data.guruId).select('p.relationship-actions').first().remove();
					}else{
						$('fb-user-' + data.guruId).select('p.relationship-actions').first().update(response.friendlyText);
					}
				}
				
				box.reset();
			}
		});
	},
	update_link_attrs : function(link, rel){
		if(rel == 0){
			link.update('<img src="/static/imgs/follow.png" alt="" width="21" height="21" />');
			link.writeAttribute("title",_("añadir a tus contactos y seguir lo que hace"));
		}else{
			link.update('<img src="/static/imgs/unfollow.png" alt="" width="21" height="21" />');
			link.writeAttribute("title",_("es uno de tus contactos, cambiar relación"));
		}
		return link;
	},
	removeForm: function(){
		$('overlay', 'container_'+ ManageRelationship.subject, ManageRelationship.subject).invoke('remove');
	}
}
var ManageService = {
	editFormTemplate : new Template('<div class="ajax-controls"><p><a class="action" href="#{edit_href}">#{edit_link}</a><br />#{edit_hint}</p><form action="/services/delete-service" method="post"><input type="hidden" name="id" value="#{service_id}" /><p><a class="action delete" href="#{delete_href}">#{delete_link}</a><br />#{delete_hint}</p></form></div>'),
	confirmTemplate : new Template('<p class="confirm">#{confirm_hint}<a class="action accept" href="#">#{confirm_yes}</a> / <a class="action cancel" href="#">#{confirm_no}</a></p>'),
	edit_box_title : _("editar o borrar"),
	edit_link : _("editar"),
	edit_hint : _("añadir o hacer cambios (opinión, valoración, fotos...)"),
	delete_link : _("eliminar"),
	delete_hint : _("al hacerlo ya no aparecerá en tu agenda"),
	confirm_hint : _("¿estás seguro?"),
	confirm_yes : _("sí"),
	confirm_no : _("no"),
	handleClick: function(e){
		e.stop();
		var origin = Event.element(e);

		if(origin.readAttribute("src") != null){
			origin = origin.up();
		}
		
		var originHref = origin.readAttribute('href');
		if((originHref === null) || !origin.hasClassName('service-action')){
			return false;
		}
		if(originHref.include('edit-service')){
			ManageService.renderEditForm({link : originHref });
			return true;
		}
		if(originHref.include('save-pro')){
			ManageService.renderSaveForm({link : originHref.gsub(/^http:\/\/.+\/save-pro/, '/save-pro' )});	
		}
		if(originHref.include('delete-service') || originHref.include('delete-draft')){
			ManageService.renderDeleteForm(originHref.gsub(/^http:\/\/.+\/services\/del/, '/del' ));
		}
		
	},
	renderEditForm : function(param){
		var data = param.link.toQueryParams();
		var dialog = new Box('edit-delete-dialog', this.edit_box_title);
		dialog.setContents(this.editFormTemplate.evaluate({
														service_id : data.id,
														edit_href : '/save-pro/' + data.id,
														edit_link : this.edit_link,
														edit_hint : this.edit_hint,
														delete_link : this.delete_link,
														delete_hint : this.delete_hint
														}));
		
		var form = dialog.getForm();
		form.observe('click', function(e){
			e.stop();
			var trigger = e.element();
			if(trigger.hasClassName('delete')){
				
				//trigger.disable();
				trigger.up().remove();
				this.insert(ManageService.confirmTemplate.evaluate({
																confirm_hint : ManageService.confirm_hint,
																confirm_yes : ManageService.confirm_yes,
																confirm_no : ManageService.confirm_no
															}));
				return true;
			}
			
			if(trigger.hasClassName('accept')){
				this.submit();
			}
			if(trigger.hasClassName('cancel')){
				dialog.reset();
			}
		});
	},
	renderSaveForm : function(param){
		var params = {service : param.link};
		if(typeof param.callback !== 'undefined'){
			params.callback = param.callback;
		}
		
		var req = new Ajax.Request('/services/save?ts=' + new Date().getTime(),{
			method: 'get',
			parameters: params,
			onSuccess : function(transport){
				var box = new Box("save-service-box");
				box.setContents(transport.responseText);
				var save_link = $('save-link'), quick_save_data = $('quick_save_data'),quick_save_form = box.getForm(), new_section_link = $('new-section-link'), cancel_quick_save = $('cancel-quick-save');
				
				if(save_link){
					save_link.observe('click', function(e){
						e.stop();
						quick_save_data.show();
						save_link.addClassName('active');
					});
				}

				if(quick_save_form){
					quick_save_form.observe('submit', ManageService.submitQuickSave.bindAsEventListener(this, box));
				}
				
				if(new_section_link){
					new_section_link.observe('click', ManageService.renderNewSectionForm.bindAsEventListener(this,box));
				}
				
				if(cancel_quick_save){
					cancel_quick_save.observe('click', function(e){
						e.stop();
						save_link.removeClassName('active');
						quick_save_data.hide();
					});
				}
				var starrater = new StarRater('rating-cont');
			}
		});
	},
	renderDeleteForm  : function(param){
		var container = new Box('boxDeleteSite', _("¿quieres borrarlo?"));
		var actionValue;
		if(param.include('delete-draft')){
			actionValue ="/services/delete-draft";
		}else{
			actionValue = "/services/delete-service";
		}
		var data = param.toQueryParams();
		var chunk = new Array();
		chunk.push("<div class=\"ajax-controls\">");
		if(actionValue.include('delete-draft')){
			chunk.push("<p>"+_("Al borrar un servicio a medio guardar, tu comentario permanece en tu agenda tal y como te lo guardaste por primera vez.") + "<br/><br/></p>");
		}else{
			chunk.push("<p>"+_("Al borrar un servicio de tu agenda, desaparecen los comentarios, vídeos, fotos, etc.. que hayas puesto y también desaparecerá de tus secciones.") + "<br/><br/></p>");
		}
		chunk.push('<form action="');
		chunk.push(actionValue);
		chunk.push('" method="post" id="delete_site">');
		chunk.push("<input type=\"hidden\" name=\"id\" value=\"" + data.id + "\" /> ");
		if(data.permalink)
			chunk.push("<input type=\"hidden\" name=\"permalink\" value=\"" + data.permalink + "\" /> ");
		chunk.push("<p class=\"button\">");		
		chunk.push("<input type=\"submit\" id=\"box_button\" value=\""+_("borrar")+"\" />");
		chunk.push("<span id=\"submitting\" style=\"display:none;\">");
		chunk.push("<img src=\"/static/imgs/ajax_activity_indicator.gif\" />");
		chunk.push(_("borrando servicio..."));
		chunk.push("</span>");
			chunk.push('<a href="#" class="action cancel-form" id="j-remove-site-container-close">');
			chunk.push(_("cancelar"));
			chunk.push('</a>');
		chunk.push("</p>");
		chunk.push("</form>");
		chunk.push("</div>");	
		
		$('boxDeleteSite').update(chunk.join(""));
		container.contentLoaded();
							
		$('delete_site').observe('submit', function(){
					$('submitting').show();
					$('box_button').disable();
					$('j-remove-site-container-close').hide()}
		);
		
		$('j-remove-site-container-close').observe('click',function(e) {
			e.stop();
			$('container_boxDeleteSite').remove();
			$('overlay').remove();
			$$("select").invoke('show');
		});
	}, 
	submitQuickSave : function(e,box){
		e.stop();
		var form = e.element();
		var redirect = $('redirect');
		
		if(redirect !== null && redirect.getValue() === 'profile'){
			form.submit();
		}else{
			//quirk, handle new_section form before box.submitGui
			ManageService._resetNewSectionForm(true, $('new-section-link'));
			$('cancel-quick-save').hide();
			box.submitGui(true);
			var req = new Ajax.Request(form.readAttribute('action'),{
				method: 'post',
				parameters : form.serialize(),
				onSuccess : function(transport){
					var resp = transport.responseText.evalJSON();

					if(resp.status === 'ok'){
						//update view (star & link)
						var sl = $$('a.service-action[href*="/save-pro/' + resp.serviceId +'"]').first();
						sl.setAttribute('href', '/services/edit-service?id='+ resp.serviceId + '');
						var img = sl.down();
						if(img !== 'undefined'){
							img.setAttribute('src', resp.src);
							img.setAttribute('alt', resp.alt);					
						}					
					}
					box.reset();
				}
			});
		}//else
	},
	renderSaveFormAfterLogin : function(service){
		this.renderSaveForm({ link: service, callback : true});
	},
	renderNewSectionForm : function(e, box){
		e.stop();
		var new_section_trigger = e.element(), new_section_form = $('new-section-form'), sections_inner = $('sections_inner');
		if(!new_section_form){
			new_section_trigger.addClassName('active');
			var req = new Ajax.Request('/services/new-section', {
		    	method : 'get',
		    	parameters : {from : 'quick_save'},
		    	onSuccess : function(transport){
		    		new_section_trigger.insert({after:transport.responseText});
		    		//handle click instead of submit in order to get control over cancel and validation
		    		new_section_trigger.next('form').observe('click', ManageService._handleNewSection.bindAsEventListener(this, new_section_trigger));
		    	}
		    });
	
		}else if(new_section_form.visible()){
			return false;
		}else{
			new_section_trigger.addClassName('active');
			new_section_form.show();
		}
		
		if(sections_inner){
			sections_inner.scrollTop = sections_inner.scrollHeight;
		}

	},
	_handleNewSection : function(e, new_section_trigger){
		e.stop();
		var target = e.element(), form = new_section_trigger.next('form');
		
		if(target.hasClassName('cancel')){
			ManageService._resetNewSectionForm(false, new_section_trigger);
		}else if(target.readAttribute('type') === 'submit'){
			
			form.up().select('p.error').invoke('remove');
			
			ManageService._submitGuiNewSection(true, form);
			
			var req = new Ajax.Request(form.readAttribute('action'),{
				method : 'post',
				parameters : form.serialize(),
				onSuccess : function(transport){
					
					var response = transport.responseText.evalJSON();
					
					
					if(typeof(response.error) !== 'undefined'){
						form.insert({before: '<p class=\"error\" style=\"font-size:11px\">' + response.error +'</p>'});
						ManageService._submitGuiNewSection(false, form);
						return true;
					}

					if(typeof(response.sectionId) !== 'undefined'){
						var section_name = (response.sectionText.length > 24) ? response.sectionText.substring(0, 21) + '...' : response.sectionText;
						form.up().insert({before: '<label title="'+ response.sectionText +'"><input type="checkbox" name="sections" checked="checked" value="'+ response.sectionId +'" />'+ section_name + '</label>'});
					}
					
					ManageService._submitGuiNewSection(false, form);
					ManageService._resetNewSectionForm(false,new_section_trigger);
				}
			});
		}
	},
	_resetNewSectionForm : function(flag, trigger){
		trigger.removeClassName('active');
		trigger.up().select('p.error').invoke('remove');
		var form = trigger.next('form');
		if(form){
			(flag)?form.remove():form.hide();
		}
	},
	_submitGuiNewSection : function(flag, form){
		var wheel = $('new-section-submitting'), cancel_link = form.select('a.cancel').first(), button = form.select('input[type="submit"]').first();
		if(flag){
			wheel.show();
			cancel_link.hide();
			button.disable();
		}else{
			wheel.hide();
			cancel_link.show();
			button.enable();
		}
	}
}
window.OOS = window.OOS || {};
/**
 * -media comments (activity stream)
 * -evt delegation on form wrapper
 **/
OOS.ReplyComment = {
	submit_value : _("comentar"),
	template : new Template('<form action="/services/reply-comment"><input type="hidden" name="id" value="#{media_id}" /><input type="text" class="reply-text" name="reply-text" maxlength="5000" /><input type="submit" value="#{submit_value}" /></form>'),
	initialize : function(elto){

		var reply = new Element('span', {className : 'reply'});

		elto.insert(reply);
		this._drawForm(elto, reply);
		reply.observe('click', this._handleClick);
	},
	_drawForm : function(elto, reply){
		var id = elto.select('a.read-more').first().identify().replace('media-','');
		reply.insert(this.template.evaluate({submit_value : this.submit_value,media_id : id}));
		
	},
	_handleClick : function(e){
		
		e.stop();
		var elto = e.element();
		
		//submit reply
		if(elto.readAttribute("type") !== null && elto.readAttribute("type") === "submit"){
			var input = this.select('input[type="text"]').first();
			if(input.getValue().blank()){
				return false;
			}
			
			elto.disable();
			
			var placeholder = elto.up(1);
			var form = elto.up();
			var new_reply = new Ajax.Request(form.readAttribute('action'),{
				method: 'post',
				parameters : form.serialize(),
				onSuccess : function(transport){
					placeholder.insert(transport.responseText);
					form.remove();
				}
			});
		}
		
		//delete reply
		if(elto.hasClassName("delete-comment")){
			if(!confirm(_("¿estás seguro?")))return;
			
			var delete_reply = new Ajax.Request('/services/delete-reply',{
				method: 'post',
				parameters : {id : elto.identify()},
				onSuccess : function(transport){
					var comment = elto.up(2); 
					var reply = elto.up(1);
					
					reply.innerHTML = '';
					OOS.ReplyComment._drawForm(comment,reply);
					
				}
			});
		}
	}
}

OOS.OpinionActions = {
	opinionFormTmpl : new Template('<form action="#{action}" method="post">' +
				'<input type="hidden" name="userServiceId" value="#{suId}" />' +
				'<textarea name="commentText"></textarea>' +
				'<p><input type="submit" value="#{submitText}" /><a href="#" class="action cancel">#{cancelLink}</a></p></form>'),
	opinionFollowFormTmpl : new Template('<form action="#{action}" method="post">' +
										'<input type="hidden" name="userServiceId" value="#{suId}" />' +
										'<textarea name="commentText"></textarea>' +
										'<label><input type="checkbox" name="followComment" />' +
										_("recibir por e-mail los comentarios nuevos sobre esta opinión") +
										'</label><p><input type="submit" value="#{submitText}" /><a href="#" class="action cancel">#{cancelLink}</a></p></form>'),
	singleOpinionTmpl : new Template('<span class="comment-on-comment"><span class="text">#{comment}</span>' +
										'<a href="#{deleteUrl}" class="action delete">' + _("eliminar comentario") + '</a>' +
									'</span>'),
    multiOpinionTmpl : new Template('<span class="comment-on-comment"><span class="text">#{comment}</span>'+
										'<a href="#{deleteUrl}" class="action delete">' + _("eliminar comentario") + '</a>' +
										'<br /><a href="#{commentsUrl}" class="action show-all-comments">' + _("ver todos los comentarios") + '</a>' +
										' <span>(#{commentsCount})</span>' +
    								'</span>'),
    deleteOpinionTmpl : new Template('<span class="delete-confirm">' +
    									_("¿estás seguro?") +
    								 '<a href="#{deleteUrl}" class="action confirm">' +
    								 	_("si") +
    								 	'</a> / <a href="#" class="action undo">' + _("no") + '</a></span>'),
	initialize : function(e){
		var el = e.element();
		if(el.hasClassName('taste')){
			//ilikeit
			e.stop();
			this.taste(el);
		}else if(el.hasClassName('opinion') || el.hasClassName('cancel')){
			//show opinion form
			e.stop();
			this.buildOpinionForm(el);
		}else if(el.readAttribute('type') != null 
				&& el.readAttribute('type')  == 'submit'){
			//submit opinion form (comment-on-comment)
			e.stop();
			this.postOpinion(el);
		}else if(el.hasClassName('delete')){
			//clicks on delete opinion
			e.stop();
			if(el.up('.opinion-actions').select('.delete-confirm').size() > 0){
				return false;
			}
			this.showDelete(el);
		}else if(el.hasClassName('confirm')){
			//confirm delete opinion
			e.stop();
			this.deleteOpinion(el);
		}else if(el.hasClassName('undo')){
			//undo delete opinion
			e.stop();
			el.up('.opinion-actions').select('.delete-confirm').first().remove();
		}
	
	},
	taste : function(el){
		var req = new Ajax.Request(el.href, {
			onSuccess : function(transport){

				var res = transport.responseText.evalJSON();
				el.href = res.trigger.href;
				el.innerHTML = res.trigger.text;
				
				if(res.trigger.href.include('/idislikeit')){
					el.removeClassName('okicon');
				}else{
					el.addClassName('okicon');
				}
			
				OOS.OpinionActions.update_wholikesit(res);
				
			}.bind(el)
		});
	},
	update_wholikesit : function(res){
		var current = $('wholikesit-' + res.su);
		if(res.count > 0){
			if(current){
				current.innerHTML = res.wholikesit.text;
			}else{
				var link = new Element('a',{className : 'wholikesit action', id : 'wholikesit-' + res.su});
				link.innerHTML = res.wholikesit.text;
				link.href = res.wholikesit.href;
				link.observe('click', OOS.wholikesit.handleClick);
				var li = new Element('li');
				li.insert(link);
				$('hreview_'+ res.su).down('a.share').up().insert({before:li});
			}
		}else{
			if(current)
				current.up().remove();
		}
	},
	buildOpinionForm : function(el){
		var opAc = el.up('.opinion-actions');
		var form = opAc.down('form');
		if(form){
			if(form.visible()){
				opAc.down('.opinion').removeClassName('current');
				form.hide();
			}else{
				opAc.down('.opinion').addClassName('current');
				form.show();
				form.down('textarea').focus();
			}
			return false;
		}
		var params = el.href.toQueryParams();
		var html = null;
		var tmplParams = {
					submitText : _("añadir comentario"),
					suId : params.userServiceId,
					action : '/services/addComment',
					cancelLink : _("cancelar")
				}
		if(typeof params.author !== 'undefined'){
			html = this.opinionFormTmpl.evaluate(tmplParams);
		}else{
			html = this.opinionFollowFormTmpl.evaluate(tmplParams);
		}
		el.up().insert(html);
		
		//gui fix
		opAc.down('.opinion').addClassName('current');
		form = opAc.down('form');
		var taste = el.up().down('.taste');
		form.setStyle({marginLeft: ((taste)?el.up().down('.taste').getWidth():0) + 'px'});
		form.down('textarea').focus();
		
	},
	postOpinion : function(el){
		var form = el.up('form');
		if(form.down('textarea').getValue().blank()){
			OOS.OpinionActions.showError(form, _("¿un comentario vacío?"));
			return false;
		}else{
			form.select('.error').invoke('remove');
		}
		
		var bt = form.down('input[type=submit]');
		bt.value = _("añadiendo...");
		bt.disable();
		
		var req = new Ajax.Request(form.action,{
			method: 'post',
			parameters : form.serialize(),
			onSuccess : function(transport){
				var res = transport.responseText.evalJSON();
				if(typeof res.error === 'undefined'){
					if($$('.comments').size() > 0){
						window.location.reload();
					}else{
						OOS.OpinionActions.opinionPosted(form, res);
					}
				}else{
					OOS.OpinionActions.showError(form, res.error);
				}
				
			}.bind(form)
		});
	},
	showDelete : function(el){
		el.insert({after : OOS.OpinionActions.deleteOpinionTmpl.evaluate({
			deleteUrl : el.href
		})});
	},
	deleteOpinion : function(el){
		var req = new Ajax.Request(el.href,{
			method: 'get',
			onSuccess : function(transport){
				window.location.reload();
			}});
	},
	opinionPosted : function(form, res){
		var formParent = form.up();
		if(res.commentsCount > 1){
			formParent.insert(OOS.OpinionActions.multiOpinionTmpl.evaluate({
				comment : res.commentText,
				deleteUrl : res.deleteUrl,
				commentsCount : res.commentsCount,
				commentsUrl : res.commentsUrl
			}));
		}else{
			formParent.insert(OOS.OpinionActions.singleOpinionTmpl.evaluate({
				comment : res.commentText,
				deleteUrl : res.deleteUrl
			}));
		}
		form.remove();
		formParent.select('.opinion').first().hide();

		//gui fix
		var taste = formParent.down('.taste');
		formParent.down('.comment-on-comment').setStyle({
								marginLeft: ((taste)?taste.getWidth():0) + 'px'
							});
		
		//update (text + counter) or create .metadata .opinion link
		var metadata = formParent.up('.hreview').down('ul.metadata');
		var currentLink = metadata.down('.opinion');
		if(currentLink){
			currentLink.update(res.commentsLinkText);
		}else{
			var liLast = metadata.down('li.last');
			var link = new Element('a',{className : 'opinion action'});
			link.innerHTML = res.commentsLinkText;
			link.href = res.commentsUrl;
			var li = new Element('li');
			li.insert(link);
			liLast.insert({before:li});
		}
	},
	showError : function(form, msg){
		form.select('.error').invoke('remove');
		form.down('textarea').insert({before:new Element('span',{className:'error'}).update(msg)});
		
		//enable form
		var bt = form.down('input[type=submit]');
		bt.value= _("añadir comentario");
		bt.enable();
	}
}

document.observe('dom:loaded', function(){

	$$('a.relationship').invoke( 'observe', 'click', ManageRelationship.renderForm);
	$$('span.rel-action-wrapper').invoke('observe', 'click', ManageRelationship.renderForm);
	$$('a.service-action').invoke('observe', 'click', ManageService.handleClick);
	
	$$('a.j-save-area').invoke('observe','click',saveArea);
	$$('a.j-remove-area').invoke('observe', 'click', removeArea);
	
	if($('activity-stream') && typeof OOS.ReplyComment !== 'undefined'){
		$$('.joaquin #activity-stream .hactivity .details p.comment').each(function(node){
			OOS.ReplyComment.initialize(node);
		});
	}

});
