/*
var xhr = $.post('/test', {});

xhr.onreadystatechange = function(e) {
	console.log(e, e.target.responseText, e.target.status, e.target.readyState);
	if(e.target.readyState == 3) {
		var site = $('<div/>').html(e.target.responseText).find('site:last').text();
		$('body').prepend('Finished loading' + site + '<br>');	
	}
}
*/
var MEDIA_URL;

var activebt;

function returnFalse() { return false; }
var $loading;

function init_search(person_id, query) {
	var $results = $('#search-results');
	if($results.length == 0) return;
	
	$results.find('span.query').html(query);
	
	var $sites = $results.slideDown('slow').find('tr.site');
	var count = $sites.length;
	
	$sites.each(function() {
		var $row = $(this);
		$.ajax({
			url: $row.attr('data-search') + person_id,
			type: 'POST',
			data: {'query': query},
			dataType: 'json',
			timeout: 10000,
			complete: function() {
				count--;
				if(count == 0) {
					$('#search-box').find('div.overlay').remove();
					$('#search-box').find('input.search').val('');
					$results.find('h3').text('Redirecting to profile page...');
					window.location = '/finish_search/' + person_id + '?query=' + query;
				}
			},
			success: function(r) {
				var results = r['results'];
				if (results.length == 0) {
					$row.find('td.search').html('No matches found');
				} else {
					var u = results[0];

					$row.find('span.age').html(u.age);
					$row.find('span.gender').html(u.gender);
					$row.find('span.location').html(u.location);
					$row.find('td.search').hide();
					$row.find('td.details').show();
					if(u.profile_url) {
						$row.find('td.image').wrapInner($('<a/>').attr('href', u.profile_url));
					}
				}						
			},
			error: function(r, x) {
				$row.find('td.search').html('No matches found');
				return;
				if (x == 'timeout') {
					$row.find('td.search').html('<span class="error">The request timed out.</span>');
				} else {
					$row.find('td.search').html('<span class="error">Something went wrong.</span>');
				}
			}
		});
	});
}

$(function() {
	MEDIA_URL = $('#MEDIA_URL').attr('value');
	$loading = $('<img/>').attr('src', MEDIA_URL + 'images/searching.gif');
	$('<img/>').attr('src', MEDIA_URL + 'images/overlay.png');

	var text = $.trim($('#system_message').text());
	if(text != "") {
		showMessage();
	}
	
	$('a.edit_review').click(function() {
		$review = $(this).closest('div.review');
		$review.find('div.comments').hide();
		$review.find('div.edit').show();
		return false;
	});
	
	$('input.cancel_edit').click(function() {
		$review = $(this).closest('div.review');
		$review.find('div.comments').show();
		$review.find('div.edit').hide();
		return false;
	});	

	$('#system_message').click(closeSystemMessage);
	
	$('#search-box').find('form').submit(function() {
		return true;
		var val = $.trim($(this).find('input.search').val());
		window.location = '/profile/' + val;
		return false;
		if(val == '') {
			showError('Please enter a username to search for.');
			return false;
		}
		var height = $('#search-box').append(getOverlay()).height();
		$('#search-box').find('div.overlay').css('padding-top', (height/2)+5);
		$.ajax({
			url: $(this).attr('action'),
			type: $(this).attr('method'),
			data: {'query': val},
			dataType: 'json',			
			success: function(r) {
				if (r.existing) {
					window.location = r.existing;
				} else {
					init_search(r.id, val);
				}
			}
		});
		return false;
	});

	$('#show-add-site').click(function() {
		$('#add-site').slideToggle();
		return false;
	});

	if ($('#user-profile').length == 1) {
		
		var $review = $('#add-review');	
		var $checks = $review.find('input:radio');
		
		$checks.hide().change(function() {
			var selected = $checks.filter(':checked');
			$('#add-review').find('label')
							.removeClass('selected')
							.filter('[for=' + selected.attr('id') + ']')
							.addClass('selected');
		}).change();	
	
		var $remaining = $review.find('div.remaining').find('span');		
		var original = parseInt($remaining.text(), 10);		
		$review.find('textarea').keyup(function() {
			var length = $(this).val().length;
			var left = original - length;
			$remaining.text(left);
			if(left < 0) {
				$(this).val($(this).val().substr(0, original)).keyup();
			}
		});
		
		$review.validate();
	
		$('div.score').find('a.vote').click(function(){
			var overlay = getOverlay();
			
			var $profile = $('#user-profile');
			var outer_height = $profile.outerHeight();
			var height = outer_height > 50 ? outer_height / 2 : 100;
			overlay.css('padding-top', height - 10);
			$profile.append(overlay);
			
			var vote = $(this).attr('class') == 'up' ? 1 : -1;
			
			$.post($(this).attr('href'), {}, function(d) {
				if (d.error) {
					showError(d.message);
				} else {
					//$('div.score').find('span').html(d.new_score);
					$score = $('div.score');
					$score.find('span.yes').html(d.yes);
					$score.find('span.no').html(d.no);
					$score.find('a').each(function() {
						$(this).replaceWith($(this).text());
					});
				}
				
				$profile.find('div.overlay').remove();
				$profile.find('div.vote').remove();
				$('#add-review').remove();
			}, "json");
			return false;
		});
		
		$('form.aliases').submit(function(e) {
			e.preventDefault();			
			$btn = $('<input/>').attr('type', 'button')
								.val('Searching...')
								.addClass('button');
			$(this).find('input:submit').hide().after($btn);
			var $form = $(this);
			var name = $form.find('input:text').val();
			name = $.trim(name).split(',')[0].split('@')[0].split('/')[0]

			$('#alias-container').show();
			var dupe = $('a.grouper').filter(function() {
				return $(this).text() == name;
			});
			if(dupe.length == 0) {
				var $li = $('<li/>').hide();
				$li.append(
					$('<a/>').attr({'class': 'grouper'})
							 .text(name)
				);
				$li.append('<br> <span class="search">Searching...</span>');
			}
			$('ul.aliases').append($li);
			$li.fadeIn('slow');

			$.post($(this).attr('action'), $(this).serialize(), function(j) {
				d = j.results;
				if(d.length > 0) {
					$li.find('a.grouper').attr('href', j.url);
					$li.find('span.search').remove();
					$.each(d, function(i, u){
						var $span = $('<span/>').attr('class', 'site');
						var name = $.trim(u.site__name);
						if(u.profile_url) {
							var $a = $('<a/>').attr('href', u.profile_url)
											  .attr('target', '_new')
											  .html(name);
							$span.html('[');
							$span.append($a);
							$span.append(']');
						} else {
							//$span.html('[' + name + ']');
						}
						$li.append($span);
					});
				} else {
					$li.find('span.search').html('No active matches');
				}
				$form.find('input:submit').show();
				$form.find('input:button').remove();
				$form.find('input:text').val('');
			}, "json");
		});
		
		var $alias_list = $('ul.aliases').find('li');
		$alias_list.hover(function() {
			$(this).addClass('active');
			$(this).find('div.options').show();			
		}, function() {
			$(this).removeClass('active');
			$(this).find('div.options').hide();
		});
		
		$('ul.aliases').find('a.wrong').click(function() {
			$alias_list.removeClass('perm_active');
			$(this).closest('li').addClass('perm_active');
			return false;
		}).bt({
			trigger: 'click',
			closeWhenOthersOpen: true,
			positions: ['right'],
			contentSelector: function(i) {
				activebt = this;
				return $('#wrong').html();			
			},
			cssClass: 'wrong',
			fill: '#fff',
			width: 'auto',
			overlap: -5,
			postShow: function(box) {
				var $li = $alias_list.filter('.perm_active');
				var $select = $(box).find('select');
				var alias = $li.find('a.grouper').text();
				$(box).find('input[name="alias"]').val(alias);				
			},
			postHide: function(box) {
				setTimeout(function() {
					if($('div.bt-content:visible').length == 0) {
						$alias_list.removeClass('perm_active');						
					}
				}, 50);
			}
		});
		
		$('td.update').find('a').bt({
			trigger: 'click',
			closeWhenOthersOpen: true,
			positions: ['right'],
			contentSelector: function(e) {
				if($(this).closest('tr').attr('data-userid') === undefined) return;				
				activebt = this;
				return $('#edit-username').html();			
			},
			cssClass: 'wrong',
			fill: '#fff',
			width: 'auto',
			overlap: -5,
			preShow: function() {				
				$alias_list.removeClass('perm_active');
			},
			postShow: function(e) {				 
				var $row = $(this).closest('tr');
				if($row.attr('data-userid') === undefined) return;
				$.each(['age', 'gender', 'location'], function(i, x) {
					var value = $('span.' + x, $row).text();
					if(value == 'Unknown') return;
					$(e).find(':input[name=' + x + ']').val(value);
				});
				$(e).find('input[name=username_id]').val($row.attr('data-userid'));
				$(e).find('input[name=site_id]').val($row.attr('data-siteid'));
			}
		}).click(returnFalse);		
	}

	$removeaccount = $('#remove-account');
	if($removeaccount.length == 1) {
		$removeaccount.submit(function() {
			return confirm('Are you really, really sure you want to remove your account?');
		});
	}

	$('a.register_link').bt({
		trigger: 'click',
		closeWhenOthersOpen: true,
		positions: ['left'],
		contentSelector: function() {
			activebt = this;
			return $('#register').html();
		},
		cssClass: 'register',
		fill: '#fff',
		width: 'auto',
		overlap: -5,
		postShow: function(box) {
			var $box = $(box);
			var $inputs = $box.find('input').addClass('required');
			$inputs.filter('[name=email]').addClass('email');
			$box.find('form').validate({
				/*rules: {
					password_confirm: {
						equalTo: "div.register input[name=password1]"
					}
				}*/
			});
			$inputs.eq(0).focus();
		}
	}).click(returnFalse);

	$('a.show_register').live('click', function() {
		//window.scroll(0,0);
		$(activebt).btOff().addClass('show_register').click();
		return false;
	});

	$('input.close_tip').live('click', function() {
		$('body').click();
		return false;
	});

	var opts = {
		trigger: 'click',
		closeWhenOthersOpen: true,
		positions: ['most'],
		contentSelector: function() {
			activebt = this;
			if($(this).hasClass('show_register')) {
				$(this).removeClass('show_register');
				return $('#register').html();
			} else {
				return $('#login').html();
			}
		},
		cssClass: 'login',
		fill: '#fff',
		width: 'auto',
		overlap: -5,
		postShow: function(box, e, u) {
			var $box = $(box);
			var $inputs = $box.find('input').addClass('required');
			$box.find('form').validate();
			$inputs.eq(0).focus();
		}
	};

	$('a.sign_in_link').bt(opts).click(returnFalse);

	if($('#add-review div.hidden-overlay').length == 1) {
		opts['positions'] = ['top'];
		$('#add-review').bt(opts).click(function() {
			$(this).find('div.hidden-overlay').addClass('active');
			return false;
		});
	}

	/*
	$('div.hidden-overlay').click(function() {
		if($(this).hasClass('active')) return;
		$(this).addClass('active');
		$(this).html('You must sign in to be able to review!<br><br>' + $('#login').html());
		return false;
	});
	*/
	
	var $trigger = $('#trigger_search');
	
	if($trigger.length == 1) {
		var person_id = $trigger.attr('data-personid');
		var query = $.trim($('h1').text());
 		$trigger.find('tr.site').each(function() {
			var $row = $(this);
			$row.find('td.update').hide();
			$.ajax({
				url: $row.attr('data-search') + person_id,
				type: 'POST',
				data: {'query': query},
				dataType: 'json',
				timeout: 10000,
				complete: function() {

				},
				success: function(r) {
					var results = r['results'];
					$row.find('td.update').show();
					if (results.length == 0) {
						$row.find('td.status').addClass('notlive').text('Not Live');
						$row.find('td.details').empty();
					} else {
						var u = results[0];
						var $details = $row.find('td.details').empty();
						if(u.age == 0) { u.age = 'Unknown'; }
						$details.append($('<span/>').addClass('gender').text(u.gender));
						$details.append(', ');						
						$details.append($('<span/>').addClass('age').text(u.age));
						$details.append(', ');
						$details.append($('<span/>').addClass('location').text(u.location));
						$row.attr('data-userid', u.id);						
						$row.find('td.status').addClass('live').text('Live');
						if(u.profile_url) {
							$row.find('td.status').wrapInner($('<a/>').attr('href', u.profile_url).attr('target', '_new'));
						}
					}						
				},
				error: function(r, x) {
					$row.find('td.status').addClass('notlive').text('Not Live');
					$row.find('td.details').empty();
				}
			});
		});
	}

	var $share = $('#share');
	if($share.length == 1) {
		$share.show();
		var $box = $('#share-box');

		function addRow(email) {
			var $img = $('<img>').attr('src', '/media/images/remove.png').addClass('remove');
			var $tr = $('<tr>');
			var $td = $('<td>').append($img);
			var $input = $('<input>').attr('type', 'text').attr('class','required email').attr('name','recipients').val($.trim(email));
			if(email == '') {
				$input.addClass('empty');
			}
			$tr.html($td.append($input));
			$('table.recipients', $box).append($tr);
		}

		$('#share-box img.remove').live('click', function() {
			if($.trim($(this).next('input').val()) != '') {
				$(this).closest('tr').remove();
				if($box.find('input[name=recipients]').length == 0) {
					addRow('');
				}
			}
		});

		$('#share-box input[name=recipients]').live('keyup', function() {
			$(this).removeClass('empty');
			if($('input.empty').length == 0) {
				addRow('');
			}
		});

		$share.submit(function(e) {
			var emails = $(this).find('input.share').val().split(',');
			$('table.recipients tr:has(td)').remove();
			if(emails.length > 0) {
				$.each(emails, function() {
					addRow(this);
				});
			}
			addRow('');
			$box.jqm().jqmShow().find('form').validate({
				errorPlacement: function() { },
				rules: {
					message: {required: false, maxlength: 150}
				}
			});
			return false;
		}).find('input.share').bind('focus', function() {
			if($(this).hasClass('watermark')) {
				$(this).removeClass('watermark');
				$(this).val('');
			}
			$share.find('span.message').text('Separate email addresses with a comma--we do not spam.').slideDown('slow');
		});
		$share.find('textarea').bind('focus click', function() {
			this.focus();
			this.select();
		});
		//$share.find('#facebook').attr('href', 'http://www.facebook.com/sharer.php?u=' + escape(window.location.href) + '&t=' + escape(window.document.title));
		$share.find('#twitter').click(function() {
			$.get($(this).attr('data-hitlink'), function() {
				var u = 'http://twitter.com/home?source=truedater&status=Check out ' + escape($.trim(window.document.title)) + ' at ' + escape(window.location.href);
				window.location.href = u;
			});
		});
		$('#redirect').val(window.location.href);
		$box.find('textarea').keyup(function() {
			var used = $(this).val().length;
			if(used > 150) {
				$(this).val($(this).val().substr(0, 150));
				used = 150;
			}
			$('#chars span').text(used);
		});
		$('#facebook').click(function() {
			$.get($(this).attr('data-hitlink'), function() { });
		});
	}
});

function getOverlay() {
	return $('<div/>').addClass('overlay').append($loading);
}

function removeOverlay() {
	$('div.overlay').remove();
}

function showMessage() {
	$('#system_message').fadeIn('slow');
	window.scrollTo(0, 0);
}		

function showSuccess(msg) {
	$('#system_message').removeClass('error')
						.addClass('success')
						.html(msg);
	showMessage();
}

function showError(msg) {
	$('#system_message').removeClass('success')
						.addClass('error')
						.html(msg);
	showMessage();
}

function closeSystemMessage() {
	$('#system_message').fadeOut('slow', function() {
		$('body').removeClass('message');		
	});	
}

function cloneMore(selector, type) {
	var newTable = $(selector).clone();
	var total = $('#id_' + type + '-TOTAL_FORMS').val();
	newTable.find('ul.errorlist').remove();
	newTable.find(':input').removeClass('hasDatepicker errorinput').each(function() {
		var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
		var id = 'id_' + name;
		$(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');
	});
	newTable.find('label').each(function() {
		var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
		$(this).attr('for', newFor);
	});
	total++;
	$('#id_' + type + '-TOTAL_FORMS').val(total);
	$(selector).after(newTable);
	bindDatePicker();
}