Sparcq = ( this["Sparcq"] || {} );


if (!Sparcq.SimilarUsers) {
	Sparcq.SimilarUsers = function (settings) {
		this.init(settings);
	};
};

Sparcq.SimilarUsers.prototype.init = function(args) {
	var self = this;

	this.cloneItem = jQuery('.comments_outer_container .comment_and_replies_default');
	this.comments = {};
	this.nestedComments = {};
	this.commentList = [];
	this.listType = args.comment_type;
	this.objectId = 'similarUsersList';
	this.totalComments = 0;
	this.replyCounts = {};
	this.defaultUserIcon = '/images/layout/placeholders/userProfilePic_50x50.png';
	this.numPerPage = 10;
	this.firstLoad = true;
	this.currentFilter = {};
	this.sortBy = '';

	this.new_paginator = new Sparcq.Paginator({
		pageContainer:jQuery('.pages', this.objectID ),
		paginatorContainer: jQuery('#similarUsersList'),
		numPerPage: this.numPerPage,
		showPagingResults: true,
		callback: function(page_num) {
			self.loadSimilarUsers(page_num);
		}
	});

	this.initFilter();
};

Sparcq.SimilarUsers.prototype.showError = function(msg) {
	alert(msg);
};

Sparcq.SimilarUsers.prototype.loadSimilarUsers = function( page ) {
	var id = 'similarUsersList';
	var self = this;
	var params = {
		sparcq_member_id: SPARCQ.SESSION.getMemberId(),
		page: page,
		return_count: self.numPerPage
	};

	for (var key in this.currentFilter) {
		var value = this.currentFilter[key];
		params['filter_' + key] = value;
	}

	if (this.firstLoad)
		params['get_groups'] = 1;

	SPARCQ.API.callMethod('user.getEstimatedSimilarUsers', {
		params: params,
		onSuccess: function(ret) {
			self.handleSimilarUsersListLoad(ret, 'similarUsersList');
		},
		onError: function(ret,id) {
			self.showError('error getting similar users list');
		}
	}); 
};

Sparcq.SimilarUsers.prototype.handleSimilarUsersListLoad = function( ret, id ) {
	var new_page = ret.parsed_return.page;
	var users = ret.parsed_return.users;
	var groups = ret.parsed_return.groups;

	this.new_paginator.setTotalPages(ret.parsed_return.total_pages);
	this.new_paginator.createCachedPage(ret,new_page);

	if ( !this.firstLoad && new_page == this.currentPage) {
		return;
	}

	var node = this.new_paginator.getPageNode( new_page );

	for (var i=0;i<users.length;i++) {
		var clone = $('#similarUsersList .rating_wide_default_display').clone();
		this.setSimilarUserItemHtml(clone, users[i]);
		node.append(clone);
		clone.removeClass('rating_wide_default_display');
	}
	
	if (!users.length) {
		node.html("wow, that's really specific. try to broaden your horizons a little bit.");
	}

	if (groups) {
		this.handleGroupData(groups);
	}

	this.isLoading = false;
	this.firstLoad = true;
};

Sparcq.SimilarUsers.prototype.setSimilarUserItemHtml = function(clone, item) {
	var html = Sparcq.SQ.parseHtml(clone.html(),{
		name: item.name,
		rating: item.rating ? item.rating + '% trusted' : '',
		pic: item.pic_square ? Sparcq.SQ.imageCachePath(item.pic_square) : this.defaultUserIcon,
		id: item.id,
		total_comments: Sparcq.SQ.getCountDisplay('comment',item.total_comments),
		total_ratings: Sparcq.SQ.getCountDisplay('total rating',item.items_rated),
		location: item.location ? '<div>' + item.location + '</div>' : '',
		common: (item.items_in_common && item.items_in_common == 1) ? item.items_in_common + ' item in common' : item.items_in_common + ' items in common',
		social: this.getProfileLinks(item.profile_links)
	});
	clone.html(html);
};

Sparcq.SimilarUsers.prototype.getProfileLinks = function(links) {
	var html = '';
	
	for (var i in links) {
		html += '<a href="' + links[i].href + '" target="_blank">' +
		'<img border="0" ' +
		'alt="' + links[i].text + '" ' +
		'title="' + links[i].text + '" ' +
		'src="/images/aquaticus/16x16/' + links[i].network + '.png"/>' +
		'</a>';
	}

	return html;
};

Sparcq.SimilarUsers.prototype.handleGroupData = function(groups) {
	var self = this;

	if ($('.slider').length == 0)
		return;

	$('.filter input[name=social_network_id]').each(function() {
		var id = this.value;
		$('.filter .social_network_' + id).text('(' + groups.social_network_id[id] + ')');
	});

	$('.filter input[name=gender]').each(function() {
		var id = this.value;
		if(groups.gender[id] != undefined) {
			$('.filter .gender_' + id).text('(' + groups.gender[id] + ')');
		} else {
			$('.filter .gender_' + id).text('');
		}
	});

	$('.slider.range.items_in_common').slider('option',{
		max: groups.items_in_common.max
	});

	if($('.current.common').hasClass('init')) {
		$('.current.common').html(groups.items_in_common.min + ' - ' + groups.items_in_common.max + ' items');
		$('.current.common').removeClass('init');
	}
	
	$('.slide.common.min').html(groups.items_in_common.min);
	$('.slide.common.max').html(groups.items_in_common.max);
	$('.slide.age.min').html('0');
	$('.slide.age.max').html('100');
}

Sparcq.SimilarUsers.prototype.initFilter = function() {
	var self = this;
	var textDelay = 2000;
	var maxAutocompleteRows = 10;

	if ($('.slider').length == 0)
		return;
	
	$('.current.age').html('15 - 75 years');
	
	$('.slider.range.age').slider({
		animate: true,
		range: true,
		values: [15, 75],
		min: 0,
		max: 100,
		slide: function(e, ui) {
			$('.current.age').html(ui.values[0] + ' - ' + ui.values[1] + ' years');
		},
		change: function(e, ui) {
			var include_null = $('.filter input[name=age_include_null]').attr('checked') ?
				':include_null' :
				'';
			
			self.filterBy('age', ui.values[0] + ',' + ui.values[1] + include_null);
		}
	});

	$('.slider.range.items_in_common').slider({
		animate: true,
		range: true,
		values: [1, 100000000],
		min: 1,
		max: 100000000,
		slide: function(e, ui) {
			$('.current.common').html(ui.values[0] + ' - ' + ui.values[1] + ' items');
		},
		change: function(e, ui) {
			self.filterBy('items_in_common', ui.values[0] + ',' + ui.values[1]);
		}
	});

	$('.filter input[name=age_include_null]').click(function() {
		var include_null = $(this).attr('checked') ?
				':include_null' :
				'';
		var min = $('.slider.range.age').slider("values", 0);
		var max = $('.slider.range.age').slider("values", 1);

		self.filterBy('age', min + ',' + max + include_null);
	})
	.attr('checked', true);

	jQuery('.filter input[type=text]')
	.data('timeout', null)
	.keyup(function(evt){
		var textField = this;

		clearTimeout(jQuery(this).data('timeout'));
		if (evt.keyCode == 13) {
			evt.preventDefault();
			self.filterBy(textField.name,jQuery(this).val());
		}
		else {
			jQuery(this).data(
				'timeout',
				setTimeout(
					function() {
						self.filterBy(textField.name,jQuery(textField).val());
					},
					textDelay
					)
				);
		}
	})
	.blur(function() {
		clearTimeout(jQuery(this).data('timeout'));
		self.filterBy(this.name,jQuery(this).val());
	})
	.val('');

	$('.filter select').change(function() {
		self.filterBy(this.name,$(this).val());
	})
	.val('');
	
	$('.filter input[name=social_network_id]').click(function() {
		var checked = '';
		$('.filter input[name=social_network_id]').each(function() {
			if (this.checked)
				checked += (checked ? ',' : '') + $(this).val();
		});
		self.filterBy(this.name,checked||-1);
	})
	.attr('checked', true);

	$('.filter input[name=gender]').click(function() {
		var checked = '';
		$('.filter input[name=gender]').each(function() {
			if (this.checked)
				checked += (checked ? ',' : '') + $(this).val();
		});
		self.filterBy(this.name,checked||-1);
	})
	.attr('checked', true);
};

Sparcq.SimilarUsers.prototype.filterBy = function(key, value) {
	if (this.currentFilter[key] != value) {
		this.currentFilter[key] = value;
		this.new_paginator.clearCache();
		this.loadSimilarUsers(1);
	}
};

Sparcq.SimilarUsers.prototype.sortBy = function(sort) {
	var self = this;
};
