// Extended functions
Array.prototype.has = function(search) {
	for (var i in this) {
		if (this[i] == search) {
			return true;
		}
	}

	return false;
};

String.prototype.stripHTML = function()
{
        // What a tag looks like
        var matchTag = /<(?:.|\s)*?>/g;
        // Replace the tag
        return this.replace(matchTag, "");
};

// Helpers
var BBS = {};

BBS.setBrowserName = function() {
	var css_name = null;
	var ua = navigator.userAgent;
	var matches = null;

	if (ua.match(/firefox/i)) {
		css_name = 'firefox';
	} else if (ua.match(/safari/i)) {
		css_name = 'safari';
	} else if (matches = ua.match(/msie (\d+)/i)) {
		css_name = 'ie ie' + matches[1];
	} else if (ua.match(/opera/i)) {
		css_name = 'opera';
	} else if (ua.match(/mozilla/)) {
		css_name = 'mozilla';
	}

	if (css_name) {
		$('body').addClass(css_name);
	}
};

BBS.defaultAvatar = function(img, size) {
	if(size){
		img.src = 'http://assets.blogblogs.com.br/avatars/no_avatar_'+ size +'.gif';
	}
	else{
		img.src = 'http://assets.blogblogs.com.br/avatars/no_avatar_250.gif';
	}
	
};

BBS.message = function(options) {
	var contents = '';

	if (options.callback) {
		eval(options.callback);
	};

	if (options.login_required) {
		contents = '<p class="message warning"><strong>Atenção</strong> Você precisa estar logado!</p>';
	} else if (options.message) {
		if (options.success) {
			contents = '<p class="message notice"><strong>Aviso</strong> ' + options.message + '</p>';
		} else {
			contents = '<p class="message error"><strong>Erro</strong> ' + options.message + '</p>';
		}
	} else if (options.flash_messages) {
		for (var i in options.flash_messages) {
			var type = '';

			if (i == 'error') {
				type = '<strong>Erro</strong> '
			} else if (i == 'notice') {
				type = '<strong>Aviso</strong> '
			} else if (i == 'warning') {
				type = '<strong>Atenção</strong> '
			}

			contents += '<p class="message ' + i + '">' + type + options.flash_messages[i] + '</p>';
		}
	}

	var timeout;

	var display_message = function(){
		$("#system_message")
			.html(contents);
		$("#system_alert")
			.hide()
			.slideDown('normal');
	}

	var close_system_alert = function(){
		if($("#system_alert").is("/timeoutid/")) {
			timeoutid = parseInt($("#system_alert").attr("class").replace("timeoutid", ""), 10);
			$("#system_alert").removeClass("timeoutid" + timeoutid);

			if (timeoutid) {
				clearTimeout(timeoutid);
			}
		}
		timeout = setTimeout(function(){
			$("#system_alert").slideUp('normal');
		}, 8000);
		$("#system_alert").addClass("timeoutid" + timeout);
	}

	if ($('#system_message').length > 0) {
		$('#system_alert').slideUp('normal', display_message);
	} else {
		display_message();
	}

	$("#system_alert")
		.mouseover(function(){
			clearTimeout(timeout);
		})
		.mouseout(function(){
			close_system_alert();
		});

	$("#system_alert_close").click(function(e){
		e.stopPropagation();
		e.preventDefault();
		$("#system_alert").slideUp('normal');
	});
	close_system_alert();
};

BBS.complaintEvent = function() {
 $('a.denunciar').click(function(e){
   BBS.stopPropagation(e);
   BBS.message;
 });
};

BBS.markEvent = function() {
	$('input.marked').parents('form').submit(function(e){
		e.stopPropagation();
		e.preventDefault();

		var method = $(this).find('[name=_method]').val();

		if (!method) {
			method = 'post';
		};

		var form = this;

		$.ajax({
			url: this.action,
			dataType: 'json',
			type: method,
			data: $(this).formSerialize() + '&format=json',
			success: function(data){
				if (data.login_required) {
					return BBS.message(data);
				}

				BBS.message(data);

				if (data.success) {
					$(form)
						.find(':submit')
						.addClass('disabled')
						.attr('disabled', 'disabled');
				};
			},
			error: function() {
				BBS.message({
					success: false,
					message: 'Não foi possível concluir esta ação. Tente novamente!'
				});
			}
		});

		return false;
	});
};

BBS.zebraList = function() {
	$("ul.zebra li:odd").addClass("odd");
	$("ul.zebra li:even").addClass("even");
};

BBS.tags = function() {
	var apply_links_to_tags = function() {
		$("#tag_suggestions a").click(function(e) {
			e.stopPropagation();
			e.preventDefault();

			var tags = $("#tags").attr("value");
			tags += (tags.length == 0) ? "" : ", ";

			$("#tags").attr("value", tags + $(this).text());
			$(this).addClass("selected");

			apply_tags();
		});
	};

	var current_terms = function() {
		if ($('#tags').length == 0) {
			return;
		}

		// split terms
		var terms = $('#tags').val().toString().split(',');

		// strip spaces
		terms = $(terms).map(function(i, term){
			return $.trim(term);
		});

		// remove empty items
		terms = $.grep(terms, function(term){
			return term != "";
		});

		// check if there's any tag to remove
		if (typeof REMOVE_TAG == 'number' && REMOVE_TAG >= 0) {
			var term = terms[REMOVE_TAG];

			$('#tag_suggestions a.selected').each(function(){
				if ($(this).text() == term) {
					$(this).removeClass('selected');
				};
			});

			terms.splice(REMOVE_TAG, 1);
			REMOVE_TAG = null;
			$('#tags').val(terms.join(', '));
		}

		return terms;
	}

	var apply_tags = function() {
		var terms = current_terms();

		// remove all tags
		$('#tags_list').empty();

		// tag template
		var tag_template = '\
			<span class="tag_button">\
				<span class="outer_tag">\
					<span class="top_left"><span/></span>\
						<span class="bottom_left"><span/></span>\
							<span class="bottom_right"><span/></span>\
							<span class="tag">{___term___}</span>\
						</span>\
						<a title="excluir" href="#" rel="{___index___}" class="tag-remove">[x]</a>\
					</span>\
		';

		$(terms).each(function(i, term){
			 var button = tag_template.split('{___term___}').join(term.stripHTML());
			 button = button.split('{___index___}').join(i);
			 $('#tags_list').append(button);
		});
	}
	apply_tags();
	apply_links_to_tags();
};

BBS.tag_list = function() {
	var timeout = null;

	$("#tags")
		.keydown(function(e){
			var keycode = e.keyCode;
			var allowed_keycodes = [
				188 // comma
			];

			// if not an allowed keycode, stop processing
			if (allowed_keycodes.has(keycode)) {
				BBS.tags();
			} else {
				clearTimeout(timeout);
				timeout = setTimeout(BBS.tags, 3000);
			}


		})
		.keyup(function(){
			if (this.value == "") {
				clearTimeout(timeout);
				BBS.tags();
			}
	});

	$('#tags_list')
		.click(function(e){
			if (!$(e.target).is('a.tag-remove')) {
				return;
			}

			// this call used to be on a blur event
			// we removed it because it was killing
			// the remove button click event and added
			// here instead
			BBS.tags();
			e.stopPropagation();
			e.preventDefault();
			REMOVE_TAG = parseInt($(e.target).attr('rel'));
			BBS.tags();
		});

	// to apply tags if tag list is not empty
	BBS.tags();

};

BBS.localities = function() {
	//Create the path to controller
	var localities_children_url = location.href.
		replace(/meu-blogblogs\/blogs\/?.*/, 'localities/').
		replace(/busca\/?.*/, 'localities/');

	var country_change = function() {
		cities = "";
		if ($("#country_id").val() == '') {
			states = "";

			$("img.arrow_state").addClass("hidden");
			$("#state_id").addClass("hidden");
			$("#state_id option").remove();

			$("img.arrow_city").addClass("hidden");
			$("#city_id").addClass("hidden");
			$("#city_id option").remove();

			return;
		}

		$("#blog_submit")
			.attr("disabled", true)
			.addClass("disabled");

		$.ajax({
			type: 'get',
			dataType: 'html',
			url: localities_children_url + $("#country_id").val(),
			success: function(data) {
				$("#blog_submit")
					.removeAttr("disabled")
					.removeClass("disabled");

				states = data;

				$("img.arrow_state").addClass("hidden");
				$("#state_id").addClass("hidden");
				$("#state_id option").remove();

				$("img.arrow_city").addClass("hidden");
				$("#city_id").addClass("hidden");
				$("#city_id option").remove();

				if (states.length <= 1) {
					return;
				}
				$("#state_id").html('<option value="">Selecione o estado</option>' + states);

				$("img.arrow_state").removeClass("hidden");
				$("#state_id").removeClass("hidden");
			},
			error: function(xhr, err_msg, err) {
				BBS.message({
					success: false,
					message: err_msg
				});
			}
		});
	};

	var state_change = function() {
		if ($("#state_id").val() == null || $("#state_id").val() == '' || $("#country_id").val() == '') {
			cities = "";

			$("img.arrow_city").addClass("hidden");
			$("#city_id").addClass("hidden");
			$("#city_id option").remove();

			return;
		}

		$("#question_submit")
			.attr("disabled", true)
			.addClass("disabled");

		$.ajax({
			type: 'get',
			dataType: 'html',
			url: localities_children_url + $("#country_id").val() + '/' + $("#state_id").val(),
			success: function(data) {
				$("#question_submit")
					.removeAttr("disabled")
					.removeClass("disabled");

				cities = data;

				$("#city_id option").remove();

				if (cities.length <= 1) {
					return;
				}

				$("#city_id").html('<option value="">Selecione a cidade</option>' + cities);
				$("img.arrow_city").removeClass("hidden");
				$("#city_id").removeClass("hidden");
			},
			error: function(xhr, err_msg, err) {
				BBS.message({
					success: false,
					message: err_msg
				});
			}
		});
	};

	$("#country_id").change(function () {
		country_change();
	});

	$("#state_id").change(function () {
		state_change();
	});
};

BBS.categories_filter = function(url) {
	var categories_children_url = location.href.
		replace(/http:\/\/[^\/]+/, '').
		replace(/meu-blogblogs\/blogs\/?.*/, 'categories/children/').
		replace(/busca\/?.*/, 'categories/children/').
		replace(/blogs\/ranking\/?.*/, 'categories/children/').
		replace(/posts\/?.*/, 'categories/children/').
		replace(/blogs\/?.*/, 'categories/children/');

	$("#parent_id").change(function() {
		if (this.value == '') {
			$("img.arrow")
				.addClass("hidden");

			$("#child_id")
				.addClass("hidden");

			return;
		}
		
		if ($("#parent_id").val().length > 0) {
			$.ajax({
				type: 'get',
				dataType: 'html',
				url: categories_children_url + this.value,
				success: function(categories) {
					$("#child_id option")
						.remove();

					$("#child_id")
						.html('<option value="">Selecione</option>' + categories);

					$("img.arrow")
						.removeClass("hidden");

					$("#child_id")
						.removeClass("hidden");
				},
				error: function(xhr, err_msg, err) {
					BBS.message({
						success: false,
						message: err_msg
					});
				}
			});
		}
	});

	$("form#categories-list").submit(function(e) {
		BBS.stopPropagation(e);
		
		var parent_id = $("#parent_id").val();
		var child_id = ($("#child_id").val() == null) ? "" : $("#child_id").val();

		location.href = url + "/" + parent_id + "/" + child_id;

		return false;
	});
};

BBS.editorial_carousel = function() {
	$("div.editorial-data:first").removeClass("hidden");

	var scrollHighlights = function(direction) {
		$("div.editorial-data").not(".hidden").each(function() {
			var next_element = $(this).next("div.editorial-data").length == 0 ? $("div.editorial-data:first") : $(this).next("div.editorial-data:first");
			var prev_element = $(this).prev("div.editorial-data").length == 0 ? $("div.editorial-data:last") : $(this).prev("div.editorial-data:first");

			$(this)
				.addClass("hidden");

			if (direction == "next") {
				next_element.removeClass("hidden");
			} else {
				prev_element.removeClass("hidden");
			}
		});
	}

	timeout = setInterval(scrollHighlights, 6000, "next");

	$("#editorial p.pagination a").click(function(e) {
		BBS.stopPropagation(e);

		if(timeout) {
			clearInterval(timeout);
			timeout = setInterval(scrollHighlights, 6000, "next");
		}

		var is_next = $(this).is(".next");
		var link_class = (is_next) ? "next" : "previous";

		scrollHighlights(link_class);
	});
};

BBS.setup_collapsing_sidebar = function(){
	if ($('body').is('.minimal-layout')) {
		return;
	};

	animatedcollapse.addDiv('lista-tags-mais-usadas', 'fade=0,speed=400,group=sidebar,hide=1');
	animatedcollapse.addDiv('lista-blogs-mais-linkados', 'fade=0,speed=400,group=sidebar,show=1');
	animatedcollapse.addDiv('lista-bookmarks-mais-populares', 'fade=0,speed=400,group=sidebar,hide=1');

	animatedcollapse.init();

	$("#tags-mais-usadas h3").click(function(e) {
		BBS.stopPropagation(e);

		animatedcollapse.toggle('lista-tags-mais-usadas')
	});

	$("#blogs-mais-linkados h3").click(function(e) {
		BBS.stopPropagation(e);

		animatedcollapse.toggle('lista-blogs-mais-linkados')
	});

	$("#bookmarks-mais-populares h3").click(function(e) {
		BBS.stopPropagation(e);

		animatedcollapse.toggle('lista-bookmarks-mais-populares')
	});
};

BBS.report = function() {
	$('form.complaint select')
		.change(function(){
			var parent = $(this).parents('form:first');

			if(parseInt(this.value) > 0) {
				$(parent).find(':text:last')
					.addClass('hidden');
			} else {
				$(parent).find(':text:last')
					.removeClass('hidden')
					.val('')
					.focus();
			}
		});

	$('form.complaint :submit').click(function(e){
		var parent = $(this).parents('form:first');
		var select = $('select:first', this.form)[0];
		var text = $(parent).find(':text:last');

		if (select.selectedIndex == select.options.length -1) {
			if ($(text).val() == "") {
				BBS.stopPropagation(e);

				alert('Informe qual é o motivo da denúncia');

				return false;
			}
		}

		return true;
	});

	$('li.denounce a')
		.click(function(e){
			BBS.stopPropagation(e);

			var report_window = $(this).parent('.report');

			if ($(report_window).is('.report_active')) {
				$(report_window)
					.removeClass('report_active')
					.addClass('report_inactive');
			} else {
				$('div.report') // close all report windows
					.removeClass('report_active')
					.addClass('report_inactive');
				$(report_window)
					.removeClass('report_inactive')
					.addClass('report_active');
			}
		});

	$('a.close').click(function(e) {
		BBS.stopPropagation(e);
		$(this).parents('div.report:first')
			.removeClass('report_active')
			.addClass('report_inactive');
	});
};

BBS.stopPropagation = function(e) {
	e.stopPropagation();
	e.preventDefault();
};

BBS.manageSearchField = function() {
	$('#q').focus(function() {
		$('#q').val('');
	});

	$('#q').blur(function() {
		if($('#q').val() == '') {
			$('#q').val('Encontre o que você procura');
		}
	});
};

BBS.addFriendRemoveModalWindow = function() {
	$('a.friend-remove').click(function(e){
		e.preventDefault();
		var friend_id = $(this).attr('id');
		var modal_link = "#TB_inline?height=280&amp;width=600&amp;inlineId=friend-modal-"+friend_id+"&amp;modal=true";
		$(this).attr('href',modal_link);
	});
};

BBS.verifyRemoveFriendship = function() {
	$('a.close-friend').click(function(e){
		e.preventDefault();
		if($('input.remove-fr:checked').length == 0){
			e.preventDefault();
			alert('Você precisa confirmar a exclusão da amizade!')
		}else{
			var friend_id = $(this).attr('id');
			var friend_permalink = $('#friend-permalink-'+friend_id).val();
			var friends_count = parseInt($('#friends-count-total').text());
			if(friends_count > 0){
				friends_count = friends_count-1;
			}else{
				friends_count = 0;
			}
			var btn_css = {
				width: "280px"
			}
			$('#remove-'+friend_id+' a').ajaxStart(function(){
				$('#remove-'+friend_id+' a').css(btn_css);
				$('#remove-'+friend_id+' a').text('').append('<img src="/images/ajaxloader.gif" alt="carregando" class="ajax-load" width="20" height="20" />').append('<span class="button-text">Removendo amizade... aguarde!</span>');
			});
			$.ajax({
				type: "DELETE",
				dataType: "json",
				url: "/usuario/"+friend_permalink+"/amigos/"+friend_id+"",
				success: function(msg){
					if(msg.success == true){
						if($('body').hasClass('people-page')){
							location.reload();
						}else{
							$('div#friend-'+friend_id).remove();
							$('#friends-count-total').text(friends_count);
						}
						tb_remove();
					}else if(msg.success == false){
						$('#remove-'+friend_id+' a').text('').append('<span class="button-text">Erro ao remover amizade!</span>');
					}
				}
			});
		}
	});
};

BBS.checkSignUpForm = function() {
	$('#signup-submit').click(function(){
		var first_name = $('#registration_firstname');
		var last_name = $('#registration_lastname');
		
		if($(this).hasClass('normal-signup')){
			var email = $('#registration_email');
			var email_confirmation = $('#registration_email_confirmation');
		}else{
			var email = $('#registration_contact_email');
			var email_confirmation = $('#registration_contact_email_confirmation');
		}
		
		var password = $('#registration_password');
		var password_confirmation = $('#registration_password_confirmation');
		var login = $('#registration_login');
		var gender = $('.radio-gender-signup:checked');
		var tou = $('#tou:checked');
		
		if(first_name.val() == ""){
			alert('O campo Nome é de preenchimento obrigatório!');
			first_name.focus();
			return false;
		}
		
		if(last_name.val() == ""){
			alert('O campo Sobrenome é de preenchimento obrigatório!');
			last_name.focus();
			return false;
		}
		
		if(email.val() == ""){
			alert('O campo E-mail é de preenchimento obrigatório!');
			email.focus();
			return false;
		}
		
		if(!validateEmail(email.val())){
			alert('O E-mail informado é inválido!');
			email.focus();
			return false;
		}
		
		if(email_confirmation.val() == ""){
			alert('O campo Confirmação de E-mail é de preenchimento obrigatório!');
			email_confirmation.focus();
			return false;
		}
		
		if(!validateEmail(email_confirmation.val())){
			alert('O E-mail de Confirmação informado é inválido!');
			email_confirmation.focus();
			return false;
		}
		
		if(email.val() != email_confirmation.val()){
			alert('Os e-mails informados nos campos E-mail e Confirmação de E-mail estão diferentes!');
			email.focus();
			return false;
		}
		
		if($(this).hasClass('normal-signup')){
			if(password.val() == ""){
				alert('O campo Senha é de preenchimento obrigatório!');
				password.focus();
				return false;
			}else if(password.val().length < 4){
				alert('O campo Senha deve conter no mínimo 4 caracteres!');
				password.focus();
				return false;
			}

			if(password_confirmation.val() == ""){
				alert('O campo Confirmação de Senha é de preenchimento obrigatório!');
				password_confirmation.focus();
				return false;
			}else if(password_confirmation.val().length < 4){
				alert('O campo Confirmação de Senha deve conter no mínimo 4 caracteres!');
				password_confirmation.focus();
				return false;
			}

			if(password.val() != password_confirmation.val()){
				alert('As senhas informadas nos campos Senha e Confirmação de Senha estão diferentes!');
				password.focus();
				return false;
			}
		}
		
		if(login.val() == ""){
			alert('O campo Apelido é de preenchimento obrigatório!');
			login.focus();
			return false;
		}else if(login.val().length < 5){
			alert('O campo Apelido deve conter no mínimo 5 caracteres!');
			login.focus();
			return false;
		}
		
		if(gender.length == 0){
			alert('O campo Sexo é de preenchimento obrigatório!');
			$('.radio-gender-signup:eq(0)').focus();
			return false;
		}
		
		if(tou.length == 0){
			alert('Você precisa aceitar os Termos de Uso para efetuar seu cadastro!');
			tou.focus();
			return false;
		}
		
		function validateEmail(elementValue){
			/* RFC822 Email Address Regex */
			qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
			dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
			atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-';
			atom += '\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
			quoted_pair = '\\x5c[\\x00-\\x7f]';
			domain_literal = "\\x5b(?:"+dtext+"|"+quoted_pair+")*\\x5d";
			quoted_string = "\\x22(?:"+qtext+"|"+quoted_pair+")*\\x22";
			domain_ref = atom;
			sub_domain = "(?:"+domain_ref+"|"+domain_literal+")";
			word = "(?:"+atom+"|"+quoted_string+")";
			domain = sub_domain+"(?:\\x2e"+sub_domain+")*";
			local_part = word+"(?:\\x2e"+word+")*";
			addr_spec = local_part+"\\x40"+domain;
			pattern = new RegExp("^"+addr_spec+"$");

			return pattern.test(elementValue);
		}
	});
};

BBS.twittThis = function(){
	$('a.twittar').click(function(e){
		e.preventDefault();
		$(this).text('Twittando');
		if($('a.twittar').hasClass('twitt-bookmark')){
			var url = $(this).attr('href').replace('http://twitter.com/home/?status=#BlogBlogs indicação de bookmark: ','');
		}else{
			var url = $(this).attr('href').replace('http://twitter.com/home/?status=#BlogBlogs indicação de blog: ','');
		}
		BitlyClient.call('shorten', {'longUrl': ''+url+''}, 'BBS.tinyCallBack');
	});
};

BBS.tinyCallBack = function(data){
	var first_result;
	for(var r in data.results){
		first_result = data.results[r];
		break;
	}
	if(data.statusCode == 'OK'){
		$('a.twittar').text('Twittar');
		if($('a.twittar').hasClass('twitt-bookmark')){
			var twitt = 'http://twitter.com/home/?status='+escape('#')+'BlogBlogs indicação de bookmark: '+first_result.shortUrl+'';
		}else{
			var twitt = 'http://twitter.com/home/?status='+escape('#')+'BlogBlogs indicação de blog: '+first_result.shortUrl+'';
		}
		window.open (twitt,"twitt_window");
	}else{
		$('a.twittar').text('Twittar');
		alert('Ocorreu um erro ao acessar o serviço. Tente novamente, por favor!');
	}
};

BBS.friendListCollapse = function(){
	$('a.friend-accept').click(function(e){
		$('div.'+$(this).attr('id')).show();
		e.preventDefault();
	});
	
	$('.cancel-add').click(function(e){
		$($(this).parent().parent().parent().parent()).hide();
		e.preventDefault();
	});
};

BBS.manageDenounces = function(){
	String.prototype.capitalize = function(){
	    return this.replace(/[A-Za-zÀ-ú]+/g, function(a){
	        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
	    });
	};
	
	BBS.manageDenounces.denouncer = false;
	BBS.manageDenounces.denouncerId = false;
	BBS.manageDenounces.denounceUrl = false;
	BBS.manageDenounces.denounceData = false;
	BBS.manageDenounces.denouncerEmail = false;
	BBS.manageDenounces.denounceReason = false;
	BBS.manageDenounces.denounceDescription = false;
	
	$('a.denounce').click(function(e){
		e.preventDefault();
		
		$('#fixed_messages').empty();
		
		$('.report-bt').show();
		$('.cancel-denounce').show();
		$('.ajax-load').hide();
		$('.button-text').hide();
		
		var btn_css = {
			width: "104px"
		}
		
		$('span.denounce-bt a').css(btn_css).empty().text('Denunciar');
		
		var denounceDetails = eval("("+$(this).attr('rel').replace(/'/g,"\"")+")");
		
		$('span.denounce-type').text(denounceDetails.type.capitalize());
		$('span.denounce-type-title').text(denounceDetails.title);
		$('#denounce-id').val(denounceDetails.id);
		
		BBS.manageDenounces.denouncePermalink = denounceDetails.permalink;
		BBS.manageDenounces.denounceObjId = denounceDetails.id;
		BBS.manageDenounces.denounceObjType = denounceDetails.type;
		
		if(denounceDetails.type == "post"){
			$('#denounce-blog-id').val(denounceDetails.id_aux);
			BBS.manageDenounces.denounceUrl = '/posts/'+denounceDetails.id+'/denunciar';
		}else if(denounceDetails.type == "blog"){
			$('#denounce-blog-id').remove();
			BBS.manageDenounces.denounceUrl = '/blog/'+denounceDetails.permalink+'/denunciar';
		}else if (denounceDetails.type == "usuário"){
			$('#denounce-blog-id').remove();
			BBS.manageDenounces.denounceUrl = '/usuario/'+denounceDetails.permalink+'/denunciar';
		}
		if(typeof(ui) != "undefined"){
			BBS.manageDenounces.denouncer = true;
			BBS.manageDenounces.denouncerId = ui;
		}
	});
	
	$('.report-bt').click(function(e){
		
		e.preventDefault();
		if(BBS.manageDenounces.denouncer == false){
			if($('#denouncer_email').val() == ''){
				alert('Por favor, informe seu e-mail');
				$('#denouncer_email').focus();
				return false;
			}
			if(!validateEmail($('#denouncer_email').val())){
				alert('O e-mail informado é inválido!');
				$('#denouncer_email').focus();
				return false;
			}
		}
		if($('#reason_description').val() == ''){
			alert('Por favor, especifique sua denúncia!');
			$('#reason_description').focus();
			return false;
		}
		
		if(BBS.manageDenounces.denounceObjType == "blog"){
			if(BBS.manageDenounces.denouncer == false){
				BBS.manageDenounces.denounceData = 'complainer_email='+$('#denouncer_email').val()+'&permalink='+BBS.manageDenounces.denouncePermalink+'&reason='+parseInt($('#reason').val())+'&justification='+$('#reason_description').val()+'&authenticity_token='+$('#authenticity_token_denounce').val()+'';
			}else{
				BBS.manageDenounces.denounceData = 'permalink='+BBS.manageDenounces.denouncePermalink+'&reason='+$('#reason').val()+'&justification='+$('#reason_description').val()+'&authenticity_token='+$('#authenticity_token_denounce').val()+'';
			}
		}
		
		if(BBS.manageDenounces.denounceObjType == "post"){
			if(BBS.manageDenounces.denouncer == false){
				BBS.manageDenounces.denounceData = 'complainer_email='+$('#denouncer_email').val()+'&id='+BBS.manageDenounces.denounceObjId+'&reason='+$('#reason').val()+'&justification='+$('#reason_description').val()+'&authenticity_token='+$('#authenticity_token_denounce').val()+'';
			}else{
				BBS.manageDenounces.denounceData = 'id='+BBS.manageDenounces.denounceObjId+'&reason='+$('#reason').val()+'&justification='+$('#reason_description').val()+'&authenticity_token='+$('#authenticity_token_denounce').val()+'';
			}
		}
		
		if(BBS.manageDenounces.denounceObjType == "usuário"){
			if(BBS.manageDenounces.denouncer == false){
				BBS.manageDenounces.denounceData = 'complainer_email='+$('#denouncer_email').val()+'&permalink='+BBS.manageDenounces.denouncePermalink+'&reason='+$('#reason').val()+'&justification='+$('#reason_description').val()+'&authenticity_token='+$('#authenticity_token_denounce_user').val()+'';
			}else{
				BBS.manageDenounces.denounceData = 'permalink='+BBS.manageDenounces.denouncePermalink+'&reason='+$('#reason').val()+'&justification='+$('#reason_description').val()+'&authenticity_token='+$('#authenticity_token_denounce_user').val()+'';
			}
		}
		
		var btn_css = {
			width: "270px"
		}
		
		$('span.denounce-bt').ajaxStart(function(){
			$('.report-bt').hide();
			$('.cancel-denounce').hide();
			$('.ajax-load').show();
			$('.button-text').show();
		});
		
		$.ajax({
			type: "POST",
			dataType: "json",
			processData: false,
			url: BBS.manageDenounces.denounceUrl,
			data: BBS.manageDenounces.denounceData,
			success: function(msg){
				if(msg.success == true){
					$('span.denounce-type').text('');
					$('span.denounce-type-title').text('');
					$('#denounce-blog-id').val('');
					$('#denounce-id').val('');
					$('#denouncer_email').val('');
					$('#reason').val(5);
					$('#reason_description').val('');
					tb_remove();
					$('p#breadcrumb').after('<div id="fixed_messages"><p class="notice message pngfix">'+msg.flash_messages.notice+'</p></div>');
				}
			}
		});
	});
	
	var btn_css = {
		width: "104px"
	}
	
	$('a.close, a.denounce-close').click(function(e){
		e.preventDefault();
		$('span.denounce-type').text('');
		$('span.denounce-type-title').text('');
		$('#denounce-blog-id').val('');
		$('#denounce-id').val('');
		$('#denouncer_email').val('');
		$('#reason').val(5);
		$('#reason_description').val('');
		tb_remove();
	});
	
	function validateEmail(elementValue){
		/* RFC822 Email Address Regex */
		qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
		dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
		atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-';
		atom += '\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
		quoted_pair = '\\x5c[\\x00-\\x7f]';
		domain_literal = "\\x5b(?:"+dtext+"|"+quoted_pair+")*\\x5d";
		quoted_string = "\\x22(?:"+qtext+"|"+quoted_pair+")*\\x22";
		domain_ref = atom;
		sub_domain = "(?:"+domain_ref+"|"+domain_literal+")";
		word = "(?:"+atom+"|"+quoted_string+")";
		domain = sub_domain+"(?:\\x2e"+sub_domain+")*";
		local_part = word+"(?:\\x2e"+word+")*";
		addr_spec = local_part+"\\x40"+domain;
		pattern = new RegExp("^"+addr_spec+"$");

		return pattern.test(elementValue);
	}
};

BBS.verifyDenouncewindowSize = function(){
	var denounce_size = $('div#denounce').height();
	if(denounce_size > 350 ){
		$('a.denounce').each(function(){
			$(this).attr('href','#TB_inline?height=430&amp;width=600&amp;inlineId=denounce&amp;modal=true');
		});
	}else if(denounce_size < 350){
		$('a.denounce').each(function(){
			$(this).attr('href','#TB_inline?height=370&amp;width=600&amp;inlineId=denounce&amp;modal=true');
		});
	}
};

BBS.manageInviteFriends = function(){
	
	BBS.manageInviteFriends.count = 0;
	
	$('li#contacts-import').addClass('selected');
	$('#found_users_list').hide();
	$('#friends-emails').val('');
	$('#message-manual').val('');
	$('input#service-username').val('');
	$('input#service-password').val('');
	
	$('li#contacts-import').click(function(e){
		e.preventDefault();
		$('li#contacts-manual').removeClass('selected');
		$('li#contacts-import').addClass('selected');
		$('div#invite-manual').hide();
		$('#found_users_list').hide();
		$('#friends-emails').val('');
		$('#message-manual').val('');
		$('#invite-import .invite-wrapper').show();
		$('#invite-import .invite-privacy').show();
		$('div#invite-import').show();
	});
	
	$('li#contacts-manual').click(function(e){
		e.preventDefault();
		$('#loading-contacts').remove();
		$('input#service-username').val('');
		$('input#service-password').val('');
		$('#invite-manual .invite-wrapper p').show();
		$('.invite-privacy').show();
		$('#invite-manual .invite-wrapper h3').show();
		$('#invite-manual .invite-wrapper #form-manual').show();
		$('li#contacts-import').removeClass('selected');
		$('li#contacts-manual').addClass('selected');
		$('div#invite-import').hide();
		$('#found_users_list').hide();
		$('div#invite-manual').show();
	});
	
	$('ul.invite-services li a#service-gmail').addClass('selected');
	$('input#service-ref').val('gmail');
	
	$('ul.invite-services li a').click(function(e){
		e.preventDefault();
		$('ul.invite-services li a').removeClass('selected');
		var service = $(this).attr('id').replace('service-','');
		$(this).addClass('selected');
		$('input#service-ref').val(service);
		$('input#service-username').val('');
		$('input#service-password').val('');
	});
	
	$('.import-bt').click(function(e){
		e.preventDefault();
		$('#contacts-list').empty();
		var container = $(this).parent().parent().parent();
		var divWidth = container.width();
		var divHeight = container.height();
		$('<div id="loading-contacts"></div>').css({
			'position': 'absolute',
			'top': -5,
			'left': 0,
			'width': divWidth,
			'height': divHeight+23,
			'background': '#fff',
			'z-index': 100,
			'opacity': 0.95,
			'text-align': 'center'
		}).appendTo(container);
		
		$('#loading-contacts').append('<p><strong>Aguarde</strong><br />Estamos carregando sua lista de contatos e este processo pode demorar um pouco.</p><img src="/images/ajax-load-contacts.gif" alt="carregando" />');
		var provider = $('input#service-ref').val();
		var providerUser = $('input#service-username').val();
		
		$.ajax({
			type: "POST",
			dataType: "json",
			url: "/meu-blogblogs/convidar-amigos/importar-contatos/",
			data: {provider:$('input#service-ref').val(), provider_user:providerUser, provider_password:$('input#service-password').val()},
			success: function(msg){
				
				var status = msg[0];
				var contacts = msg[1];
				var carac_aux = "";
				var caracs = [];
				var outros = false;
				var pattern1 = /[0-9/-]/;
				var li_id = "";
				
				if(status == true){
					$('#invite-import .invite-wrapper').hide();
					$('#loading-contacts').hide().remove();
					for(var i = 0; i < contacts.length; i++){
						var contact = contacts[i];
						var caractere = contact.name.charAt(0).toLowerCase();
						if(caractere != carac_aux){
							if(pattern1.test(caractere)){
								if(outros == false){
									caracs.push("outros");
									outros = true;
									li_id = 'outros';
								}
							}else{
								caracs.push(caractere);
								li_id = caractere;
							}
							carac_aux = caractere;
						}
						var htmlContent = '<li class="clearfix" id="'+li_id+'">';
						if((contact.relationship == "accepted") || (contact.relationship == "pending")){
							htmlContent += '<input type="checkbox" name="user-contact" id="user-contact-'+i+'" value="" disabled="disabled" class="chk-contact" />';
						}else if((contact.relationship == "none") && (contact.permalink != null)){
							htmlContent += '<input type="checkbox" class="bbs-user" name="user-contact" id="user-contact-'+i+'" value="'+contact.name+'||'+contact.email+'||'+contact.permalink+'" class="chk-contact" />';
						}else{
							htmlContent += '<input type="checkbox" name="user-contact" id="user-contact-'+i+'" value="'+contact.name+'||'+contact.email+'||'+contact.permalink+'" class="chk-contact" />';
						}
						htmlContent += '<label for="user-contact-'+i+'" class="clearfix">';
						if((contact.relationship == "none") && (contact.permalink != null)){
							htmlContent += '<span class="contact-name">'+contact.name+'</span> <span class="contact-email">'+contact.email+'</span> <span class="contact-relationship-open">open</span>';
						}else{
							htmlContent += '<span class="contact-name">'+contact.name+'</span> <span class="contact-email">'+contact.email+'</span> <span class="contact-relationship-'+contact.relationship+'">'+contact.relationship+'</span>';
						}
						htmlContent += '</label>';
						htmlContent += '</li>';
						$('#contacts-list').append(htmlContent);
						$('#total-selected-contacts strong').text(contacts.length);
						$('#invite-import .invite-privacy').hide();
						$('img.contacts-service-img').attr('src','/images/ico_contacts_'+provider+'.png');
						$('#contacts-list :checkbox').each(function(){
							$(this).not('[disabled]').removeAttr('checked');
						});
						$('#found_users_list').show();
					}
				}else{
					$('#loading-contacts').empty().append('<p><strong>Erro ao importar contatos!</strong><br />Ocorreu um erro ao importar os seus contatos.<br />Por favor, tente novamente!<br /><a href="#" title="Fechar" class="import-close">fechar</a></p>').show('fast');
					$('a.import-close').click(function(e){
						e.preventDefault();
						$('#loading-contacts').hide('fast').remove();
					});
				}
			}
		});
	});
	
	$('#select_all').click(function(){
		if($(this).attr('checked') == true){
			$('#contacts-list :checkbox').each(function(){
				$(this).not('[disabled]').attr('checked','checked');
			});
		}else if($(this).attr('checked') == false){
			$('#contacts-list :checkbox').each(function(){
				$(this).not('[disabled]').removeAttr('checked');
			});
		}
	});
	
	$('#select_blogblogs').click(function(){
		if($(this).attr('checked') == true){
			$('#contacts-list :checkbox.bbs-user').each(function(){
				$(this).not('[disabled]').attr('checked','checked');
			});
		}else if($(this).attr('checked') == false){
			$('#contacts-list :checkbox.bbs-user').each(function(){
				$(this).not('[disabled]').removeAttr('checked');
			});
		}
	});
	
	$('.invite-auto-bt').click(function(e){
		e.preventDefault();
		var count = $("#my-invites-form input:checked").length;
		
		if(count == 0){
			alert('Você precisa selecionar pelo menos um contato!');
			return false;
		}else{
			$('#loading-contacts').remove();
			var container = $('#invite-import .invite-wrapper');
			var divWidth = container.width();
			$('#found_users_list').hide();
			$('<div id="loading-contacts"></div>').css({
				'position': 'absolute',
				'top': -5,
				'left': 0,
				'width': divWidth,
				'height': 250,
				'background': '#fff',
				'z-index': 100,
				'opacity': 0.95,
				'text-align': 'center'
			}).appendTo(container);

			$('#loading-contacts').append('<p><strong>Aguarde</strong><br />Estamos enviando os convites para os contatos selecionados e este processo pode demorar um pouco.</p><img src="/images/ajax-load-contacts.gif" alt="carregando" />');
			$('#invite-import .invite-wrapper').show();
			
			var contacts = new Array();
			var message = $('#message').val();

			$("#my-invites-form input:checked").each(function(){
				var objectId = $(this).attr('id');
				var inviteInfo = $('#'+objectId).val();
				contacts.push(inviteInfo);
			});
			$.post('/meu-blogblogs/convidar-amigos', {'contacts[]': [contacts], 'message': message}, function(data){
				// try to parse the response as json
				try{
					var data = $.parseJSON(data);
				}catch (e) {
					var data = false;
				}
				if(data.success == true){
					$('#loading-contacts').remove();
					var container = $('#invite-import .invite-wrapper');
					$('<div id="loading-contacts"></div>').css({
						'position': 'absolute',
						'top': -5,
						'left': 0,
						'width': divWidth,
						'height': 250,
						'background': '#fff',
						'z-index': 100,
						'opacity': 0.95,
						'text-align': 'center'
					}).appendTo(container);
					$('#invite-import .invite-wrapper').show();
					$('#loading-contacts').append('<p><strong>Sucesso</strong><br />O(s) convite(s) para o(s) '+count+' contato(s) selecionado(s) foram enviados!!!</p><br /><a href="#" title="Fechar" class="import-close">fechar</a>');
					$('a.import-close').click(function(e){
						e.preventDefault();
						$('#loading-contacts').hide('fast').remove();
					});
				}
			});
		}
	});
	
	$('.invite-manual-bt').click(function(e){
		e.preventDefault();
		var emails = $('#friends-emails').val();
		var message = $('#message-manual').val();
		
		if(emails == ""){
			alert('Você precisa digitar pelo menos um contato!');
		}else{
			$('#loading-contacts').remove();
			var container = $('#invite-manual .invite-wrapper');
			$('#invite-manual .invite-wrapper p').hide();
			$('.invite-privacy').hide();
			$('#invite-manual .invite-wrapper h3').hide();
			$('#invite-manual .invite-wrapper #form-manual').hide();
			$('#found_users_list').hide();
			$('<div id="loading-contacts"></div>').css({
				'position': 'absolute',
				'top': -5,
				'left': 0,
				'width': 465,
				'height': 250,
				'background': '#fff',
				'z-index': 100,
				'opacity': 0.95,
				'text-align': 'center',
				'padding-top': 50
			}).appendTo(container);

			$('#loading-contacts').append('<p><strong>Aguarde</strong><br />Estamos enviando os convites para os contatos selecionados e este processo pode demorar um pouco.</p><img src="/images/ajax-load-contacts.gif" alt="carregando" />');
			$('#invite-manual .invite-wrapper').show();
			
			$.post('/meu-blogblogs/convidar-amigos/manual', {'emails': [emails], 'message': message}, function(data){
				// try to parse the response as json
				try{
					var data = $.parseJSON(data);
				}catch (e) {
					var data = false;
				}
				if(data.success == true){
					$('#loading-contacts').remove();
					var container = $('#invite-manual .invite-wrapper');
					$('<div id="loading-contacts"></div>').css({
						'position': 'absolute',
						'top': -5,
						'left': 0,
						'width': 465,
						'height': 250,
						'background': '#fff',
						'z-index': 100,
						'opacity': 0.95,
						'text-align': 'center',
						'padding-top': 50
					}).appendTo(container);
					$('#invite-import .invite-wrapper').show();
					$('#loading-contacts').append('<p><strong>Sucesso</strong><br />O(s) convite(s) para o(s) contato(s) informados(s) foram enviados!!!</p><br /><a href="#" title="Fechar" class="import-close">fechar</a>');
					$('a.import-close').click(function(e){
						e.preventDefault();
						$('#loading-contacts').hide('fast').remove();
						$('#friends-emails').val('');
						$('#message-manual').val('');
						$('#invite-manual .invite-wrapper p').show();
						$('.invite-privacy').show();
						$('#invite-manual .invite-wrapper h3').show();
						$('#invite-manual .invite-wrapper #form-manual').show();
					});
				}else if(data.success == false){
					$('#loading-contacts').empty();
					$('#loading-contacts').remove();
					$('#loading-contacts').empty();
					var container = $('#invite-manual .invite-wrapper');
					$('<div id="loading-contacts"></div>').css({
						'position': 'absolute',
						'top': -5,
						'left': 0,
						'width': 465,
						'height': 250,
						'background': '#fff',
						'z-index': 100,
						'opacity': 0.95,
						'text-align': 'center',
						'padding-top': 50
					}).appendTo(container);
					$('#invite-import .invite-wrapper').show();
					$('#loading-contacts').append('<p><strong>Erro</strong><br />'+data.flash+'</p><br /><a href="#" title="Fechar" class="import-close">fechar</a>');
					$('a.import-close').click(function(e){
						e.preventDefault();
						$('#loading-contacts').hide('fast').remove();
						$('#friends-emails').val('');
						$('#message-manual').val('');
						$('#invite-manual .invite-wrapper p').show();
						$('.invite-privacy').show();
						$('#invite-manual .invite-wrapper h3').show();
						$('#invite-manual .invite-wrapper #form-manual').show();
					});
				}
			});
		}
	});
	
};

BBS.manageAdminBox = function(){
	if(!$('body').hasClass('minimal-layout')){
		$('a.admin').livequery('click', function(e){
			e.preventDefault();
			var boxId = 'box_'+$(this).attr('id');
			$('#'+boxId+'').toggle();
		});

		$('.post-remove').livequery('click', function(e){
			e.preventDefault();
			if(confirm('Deseja realmente deletar este post?')){
				var postId = $(this).attr('id').replace('remove_','');
				$(this).text('Removendo post');
				$.ajax({
					type: "DELETE",
					url: "/posts/"+postId+"",
					dataType: 'json',
					success: function(msg){
						if(msg.success == true){
							$('#post_'+postId).remove();
						}else{
							alert('Erro ao remover post!');
						}
					}
				});
			}
		});
	}
};

BBS.addToBlogger = function(){
	$('.add-blogger').click(function(e){
		e.preventDefault();
		if($('#ping-code').length == 1){
			var sCode = $('#ping-code').val().replace(/"/g,"\'");
		}else if($('#code').length == 1){
			var sCode = $('#code').val().replace(/"/g,"");
		}
		var title = '';
		var titles = { 'buttons': 'Buttons',
		           'last': 'Últimos Leitores',
		           'rank': 'BlogRank',
		           'gadgets': 'Gadgets'};
		var rel = $(this).attr('rel');
		if(titles[rel]) {
			title = ' - ' + titles[rel];
		}
		var url = 'http://beta.blogger.com/add-widget?widget.title=BlogBlogs'+title+'&widget.content=' + sCode;
		url += '&infoUrl=http://www.blogblogs.com.br/meu-blogblogs/ferramentas/';
		url += '&logoUrl=http://www.blogblogs.com.br/images/promo/blogblogs_112x34_white.gif';
		if(sCode != ""){
			window.open (url,"blogger_window");
		}else{
			alert('É necessário configurar seu widget/gadget primeiro!');
		}
	});
}

// BEFORE!
Rails.before = function() {
	BBS.setBrowserName();
	BBS.complaintEvent();
	BBS.markEvent();
	BBS.setup_collapsing_sidebar();
	BBS.manageSearchField();
	BBS.checkSignUpForm();
	BBS.friendListCollapse();
	BBS.verifyRemoveFriendship();
	BBS.addFriendRemoveModalWindow();
	BBS.twittThis();
	BBS.manageDenounces();
	BBS.verifyDenouncewindowSize();
	BBS.manageAdminBox();
	BBS.manageInviteFriends();
	BBS.addToBlogger();

	if (USER_IS_ADMIN) {
		function add_highlight_link_for_admin() {
			var html_template = '<li class="admin-item">';
			html_template += '<a href="#" class="admin" id=":highlightable_id">admin</a>';
			html_template += '<ul class="admin-box" id="box_:highlightable_id">';
			html_template += '<li><a href="" title="Remover post" class="post-remove" id="remove_:highlightable_id">Remover post</a></li>';
			html_template += '<li class="last-item"><a class="highlight" title="" href="/admin/:highlightable_type/:highlightable_id/highlights">Destacar na Home</a></li>';
			html_template += '</ul>';
			html_template += '</li>';
			// for the posts
			$("div.post").each(function() {
				var tag_id = $(this).attr("id");
				var post_id = tag_id.replace("post_", "");
				$("div#" + tag_id + " div.actions ul.user-actions").append(html_template.replace(/:highlightable_type/g, "post").replace(/:highlightable_id/g, post_id));
			});

			// for the bookmarks
			var html_url_template = '<li class="last-item"><a class="highlight" title="" href="/admin/:highlightable_type/:highlightable_id/highlights">Destacar na Home</a></li>';
			$("div.url").each(function() {
				var tag_id = $(this).attr("id");
				var url_id = tag_id.replace("url_", "");
				$("div#" + tag_id + " div.actions ul.admin-box").append(html_url_template.replace(":highlightable_type", "bookmarking").replace(":highlightable_id", url_id));
			});
		}
		add_highlight_link_for_admin();
	}

	// Fix hover on IE
	$("ul#categories-menu > li")
		.mouseover(function() {
			$(this).addClass("over");
		})
		.mouseout(function() {
			$(this).removeClass("over");
		});

	$("div.stats li.ranking a")
		.mouseover(function() {
			$(this).addClass("over");
		})
		.mouseout(function() {
			$(this).removeClass("over");
		});

	$("ol#my-ranking li a")
		.mouseover(function() {
			$(this).addClass("over");
		})
		.mouseout(function() {
			$(this).removeClass("over");
		});
};

// RAILS::HOME
Rails.home = {};
Rails.home.index = function() {
	BBS.editorial_carousel();
};

// RAILS::POSTS
Rails.posts = {};
Rails.posts.before = function() {
	BBS.categories_filter("/posts");
};

// RAILS::USERS
Rails.users = {};
Rails.users.signup = function() {
	var check = $(':checkbox#openid');
	var verifyOpenIDCheck = function() {
		if (this.checked) {
			$('#regular-signup').hide();
			$('#openid-signup').show();
		} else {
			$('#regular-signup').show();
			$('#openid-signup').hide();
		}
	};

	$(check).click(verifyOpenIDCheck);
	$('#openid-signup').hide();
};

// RAILS::BLOGS
Rails.blogs = {};
Rails.blogs.by_category = function() {
	BBS.categories_filter("/blogs");
};

Rails.blogs.index = function() {
	BBS.editorial_carousel();
};
Rails.blogs.top_ranking = function() {
	// Load the categories actions
	BBS.categories_filter("/blogs/ranking");
};

Rails.blogs.top_ranking_by_category = function() {
	// Load the categories actions

	BBS.categories_filter("/blogs/ranking");
};

// RAILS::BOOKMARKS
Rails.bookmarks = {};
Rails.bookmarks.index = function() {
	BBS.editorial_carousel();
};

// RAILS::MY::BOOKMARKS
BBS.my_bookmarks_tags = function() {
	var remove_tags = function() {
		var terms = $("#tags").attr("value").split(",");
		terms = $(terms).map(function(i, term){
			return $.trim(term);
		});

		$("#tag_suggestions a.selected").each(function() {
			var has = false;
			for (var i in terms) {
				if (terms[i] == $(this).text()) {
					has = true;
				}
			}

			if (!has) {
				$(this).removeClass("selected");
			}
		});
	};

	var timeout = null;
	$("#tags")
		.keydown(function(e){
			clearTimeout(timeout);
			timeout = setTimeout(remove_tags, 3000);
		})
		.keyup(function(){
			if (this.value == "") {
				clearTimeout(timeout);
				remove_tags();
			}
		});

	var suggested_tags = function() {
		$("#bookmark_url_url").blur(function() {
			var url = $("#bookmark_url_url").attr("value");

			if (url.indexOf('http://') == -1) {
				url = 'http://' + url;
				$("#bookmark_url_url").val(url);
			}

			$("#tag_suggestions")
				.load(
					"/my/bookmarks/more_tags",
					{ target: url, tags: $("#tags").val() },
					function() { BBS.tags(); }
				);
		});
	};
	suggested_tags();

	if ($("#bookmark_url_url").val()) {
		$("#bookmark_url_url").trigger("blur");
	}

	BBS.tag_list();
};

Rails.my_bookmarks = {};
Rails.my_bookmarks.add = function() {
	BBS.my_bookmarks_tags();
};

Rails.my_bookmarks.edit = function() {
	BBS.my_bookmarks_tags();
};

// RAILS::MY::BLOGS
Rails.my_blogs = {};
Rails.my_blogs.edit = function() {
	// Load the categories actions
	BBS.categories_filter();

	// Load the localities actions
	BBS.localities();

	// Load the tags actions
	BBS.tag_list();

	$("#blog_kind").change(function() {
		//if the link added is not a blog
		if ($("#blog_kind").val() == '2') {
			$("#blog_especific_kind").addClass("hidden");
		}
		else {
			$("#blog_especific_kind").removeClass("hidden");
		}
	});
};

Rails.my_tools = {};
Rails.my_tools.index = function() {
	$(".radio").click(function(){
		$("#ping-code").val(this.value)
	});
};

Rails.my_tools.blog_rank = function() {
	
	$('#widget-options').addClass('hidden');
	
	var generate_blogrank_link = function() {
		if ($("#blog").val() != ""){
			
			$('#widget-options').removeClass('hidden');
			
			blog_rank_url			= "http://embed.blogblogs.com.br/embed/blogrank?blog_id=" + $("#blog").val();
			code_with_style			= "<script type=\"text/javascript\" src=\"" + blog_rank_url + "\"></script>";
			code_without_style	= "<script type=\"text/javascript\" src=\"" + blog_rank_url + "&style=0\"></script>";

			if	($("input:checked").val() == "with_style"){
				$("#code").val(code_with_style);
			}
			else {
				$("#code").val(code_without_style);
			}
		}
		else {
			$('#widget-options').addClass('hidden');
			$("#code").val("");
		}
	}

	$("#blog").change(function(){
		generate_blogrank_link();
	});
	$(".radio").click(function(){
		generate_blogrank_link();
	});
};

Rails.my_tools.last_readers = function() {
	
	$('#widget-options').addClass('hidden');
	
	var generate_last_readers_link = function() {
		if ($("#blog").val() != "") {
			
			$('#widget-options').removeClass('hidden');
			
			appearance	= $("input[name=appearance]:checked").val();
			ranking		= $("input[name=ranking]:checked").val();
			readers		= $("select[name=readers]").val();
			style			= $("input[name=style]:checked").val();
			image		= $("input[name=image]:checked").val();

			code_parameters = appearance + style + ranking + readers;
			if (style != "") {
				code_parameters = code_parameters + image;
			}

			blog_url	= "http://embed.blogblogs.com.br/embed/readers?blog_id=" + $("#blog").val() + code_parameters;
			code		= "<script type=\"text/javascript\" src=\"" + blog_url + "\"></script>";

			$("#code").val(code);
		}
		else {
			$("#code").val("");
			$('#widget-options').addClass('hidden');
		}
	};

	$("#widget-form :radio").click(function() {
		generate_last_readers_link();
	});

	$("input[name=style]").click(function() {
		if ($("input[name=style]:checked").val() == "") {
			$('#widgets-images').addClass('hidden');
		}
		else {
			$('#widgets-images').removeClass('hidden');
		}
	});

	$("input[name=appearance]").click(function() {
		if ($("input[name=appearance]:checked").val() == "") {
			$("#image-small-list").removeClass("hidden")
			$("#image-big-list").addClass("hidden")
			$("#image-smal-grid").addClass("hidden")
			$("#image-big-grid").addClass("hidden")
		}
		if ($("input[name=appearance]:checked").val() == "&layout=LB") {
			$("#image-small-list").addClass("hidden")
			$("#image-big-list").removeClass("hidden")
			$("#image-smal-grid").addClass("hidden")
			$("#image-big-grid").addClass("hidden")
		}
		if ($("input[name=appearance]:checked").val() == "&layout=GS") {
			$("#image-small-list").addClass("hidden")
			$("#image-big-list").addClass("hidden")
			$("#image-smal-grid").removeClass("hidden")
			$("#image-big-grid").addClass("hidden")
		}
		if ($("input[name=appearance]:checked").val() == "&layout=GB") {
			$("#image-small-list").addClass("hidden")
			$("#image-big-list").addClass("hidden")
			$("#image-smal-grid").addClass("hidden")
			$("#image-big-grid").removeClass("hidden")
		}

	});

	$("select[name=readers]").change(function() {
		generate_last_readers_link();
	});

	$('#blog').click(function() {
		generate_last_readers_link();
	});
};

Rails.my_tools.gadgets = function() {
	
	$('#fave-gadget').addClass('hidden');
	
	var generate_fave_link = function() {
		if ($("#blog").val() != "") {
			
			$('#fave-gadget').removeClass('hidden');
			
			fave_url = '<a href="http://blogblogs.com.br/my/gadgets/fave?url=' + $('#blog').val() + '" title="Adicionar aos Favoritos BlogBlogs" rel="alternate">';
			code = fave_url + $("input[name=fave_option]:checked").val() + "</a>";
			$("#ping-code").val(code);
		}
		else {
			$('#fave-gadget').addClass('hidden');
			$("#ping-code").val("");
		}
	};

	$("#blog").change(function() {
		generate_fave_link();
	});

	$('input[name=fave_option]').click(function() {
		generate_fave_link();
	});
};

// RAILS::MY::SUBSCRIPTIONS
Rails.my_subscriptions = {};
Rails.my_subscriptions.index = function() {
	subscriptions = new Array();
	subscriptions["brasigo"] = "http://www.brasigo.com.br/u/";
	subscriptions["twitter"] = "http://twitter.com/";
	subscriptions["jaiku"] = "http://.jaiku.com";
	subscriptions["friend_feed"] = "http:/friendfeed.com/";
	subscriptions["flickr"] = "http://flickr.com/";
	subscriptions["you_tube"] = "http://www.youtube.com/user/";
	subscriptions["videolog"] = "http://videolog.uol.com.br/";
	
	var services = $('select[name=name]');
	$(services).change(function() {
		if (subscriptions[services.val()]) {
			$('#login_or_url').replaceWith("<label for=\"url\" id=\"login_or_url\">Login no site</label>")
		}
		else {
			$('#login_or_url').replaceWith("<label for=\"url\" id=\"login_or_url\">Endereço (URL)</label>")
		}
	});
};

// RAILS::SEARCH::INDEX
Rails.search = {};
Rails.search.index = function() {

	// Load the categories actions
	BBS.categories_filter();

	// Load the localities actions
	BBS.localities();

	var toggleSummary = function(parent)
	{
		var box = $(parent).find(".expandable-search-box:first");
		var summary = $(parent).find(".expandable-search-box-title p:first");

		if ($(box).is(".hidden"))
		{
			$.cookie($(parent).attr("id"), "open");
			$(summary).addClass("hidden");
			$(box).removeClass("hidden");
		}
		else
		{
			$.cookie($(parent).attr("id"), "closed");
			callbacks[$(parent).attr("id")]("add", parent, summary);
			$(summary).removeClass("hidden");
			$(box).addClass("hidden");
		}
	}

	var callbacks = new Array();

	var handleSelectField = function(operation, parent, summary, ids)
	{
		var options = ids.map(function(e) { return $(parent).find(e + " option:selected"); });
		var values = options.map(function(e) { return e.val() || ""; });
		var texts = options.map(function(e) { return e.text() || ""; });

		if (operation == "add")
		{
			for(i = 0, l = values.length; i < l; i++)
			{
				if (values[l - 1].length == 0)
				{
					values.unshift(values.pop());
					texts.unshift(texts.pop());
				}
				else
				{
					break;
				}
			}
			$(summary).find("span:first").html("");
			for(i = 0, l = values.length; i < l; i++)
			{
				if (values[i].length > 0)
				{
					if (i == values.length - 1)
					{
						$(summary).find("span.last-item span").html("<span>" + texts[i] + "</span>");
					}
					else
					{
						$(summary).find("span:first").append("<span>" + texts[i] + "</span>");
						$(summary).find("span:first").append("<span class=\"separator\"> > </span>");
					}
				}
			}
		}
		else
		{
			$(summary).parents("fieldset:first").find("a.cancel_bt").addClass("hidden");
			$(parent).find(ids[0] + " option:first").attr("selected", true);
			ids.slice(1).map(function(e) {
				element = $(parent).find(e);
				element.html("<option values=\"\">Selecione</option>");
				element.addClass("hidden");
			});
			$(summary).find("span:first").html("");
			$(summary).find("span.last-item span").html("");
		}
	}

	var handleTextField = function(operation, parent, summary, element, separator, delimiter)
	{
		var value = $(element).val().split(separator);

		if (operation == "add")
		{
			if (value.length > 1) $(summary).find("span:first").html(value.slice(0, value.length - 1).join(delimiter) + delimiter);
			if (value.length > 0) $(summary).find("span.last-item span").html(value[value.length - 1]);
			value.length > 0 ? $(summary).find("a").removeClass("hidden") : $(summary).find("a").addClass("hidden");
		}
		else
		{
			$(summary).parents("fieldset:first").find("a.cancel_bt").addClass("hidden");
			$(summary).find("span:first").html("");
			$(summary).find("span.last-item span").html("");
			$(element).val("")
		}
	};

	callbacks["local-search-set"] = function(operation, parent, summary)
	{
		handleSelectField(operation, parent, summary, ["#country_id", "#state_id", "#city_id"]);
	};

	callbacks["category-search-set"] = function(operation, parent, summary)
	{
		handleSelectField(operation, parent, summary, ["#parent_id", "#child_id"]);
	};

	callbacks["tags-search-set"] = function(operation, parent, summary)
	{
		handleTextField(operation, parent, summary, $(parent).find("input"), /,\s?/, ", ");
	};

	callbacks["author-search-set"] = function(operation, parent, summary)
	{
		handleTextField(operation, parent, summary, $(parent).find("input"), /\s+/, " ");
	};

	$("#col-data fieldset").each(function() {
		if ($.cookie($(this).attr("id")) == "closed")
		{
			toggleSummary($(this));
		}
	});

	$("#col-data fieldset a.cancel_bt").click(function(e) {
		e.stopPropagation();
		e.preventDefault();
		var parent = $(this).parents("fieldset:first");
		var summary = $(parent).find(".expandable-search-box-title p:first");
		callbacks[$(parent).attr("id")]("remove", parent, summary);
	});

	$("#col-data fieldset .expandable-search-box-title label").click(function() {
		toggleSummary($(this).parents("fieldset:first"));
	});
}

// RAILS::PEOPLE::VIEW
Rails.people = {};
Rails.people.view = function() {
	BBS.report();
}