(function () {

function init() {
	friend_panel = new Fx.Window({
		id: 'friend-panel',
		applyId: 'friend-form',
		title: '添加好友',
		buttons: [{
			text: '关闭',
			handler: function() {
				friend_panel.hide();
			}
		}]
	});
	
	var add_form = $('#add-friend-form');
	
	function show_friend_panel() {
		add_form.hide();
		friend_panel.show();
		return false;
	}
	
	function hide_friend_panel() {
		friend_panel.hide();
	}
	
	$('#add-friend-anchor').click(show_friend_panel);
	
//	$('#search-friend-form .button.submit').click(search_friend);
//	$('#add-friend-form .button.submit').click(add_friend);
	
	$('#search-friend-form').bind('submit', search_friend);
	$('#add-friend-form').bind('submit', add_friend);
	
	friend_panel.hide();
	
	$('.delete-friend').click(delete_friend);
	
	$('#operation .bd span a#request').click(request_friend);
	$('.friends-panel .detail .bd span.sign span.sign-value form').hide();
	
	$('.friends-panel .detail .bd span.sign span.sign-value .edit').click(descript_friendship);
	
	$('.friends-panel .detail .bd span.sign span.sign-value form input[type=submit]').click(function () {
		var form = $(this).parent();
		var input_array = $('input[type=text], input[type=hidden]', form);
		var len = input_array.length;
		
		var data = new Object();
		
		for (var i = 0; i < len; i++) {
			var input = $(input_array[i]);
			var name = input.attr('name');
			var value = input.val();
			
			data[name] = value;
		}
		
		var url = form.attr('action');
		var method = form.attr('method') || 'post';
		
		$.ajax({
			type: method,
			url: url,
			data: data,
			success: function(data) {
				var result = JSON.parse(data);
				
				if (result.status == 'ok') {
					$('#' + result.element).text(result.description);
				}
				
				form.fadeOut();
			}
		});
		
		return false;
	});
	
	$('.friends-panel .detail .bd span.sign span.sign-value form input[type=reset]').click(function () {
		var form = $(this).parent();
		form.fadeOut();
		return false;
	});
}

function search_friend() {
	var query = $('#friend-query').val();
	
	$.ajax({
		type: 'post',
		url: search_friend_url,
		data: {
			query: query,
			offset: 0
		},
		success: search_friend_success,
		error: function() {},
		complete: function() {
			$('#friend-form').removeClass('loading-red');
		}
	});
	
	$('#friend-form').addClass('loading-red');
	return false;
}

function search_friend_success(data, status) {	
	var user_array = JSON.parse(data);
	
	var len = user_array.length;
	var table = $('.user-list');
	var tbody = $('tbody', table);
	
	tbody.html('');
	
	for (var i = 0; i < len; i++) {
		var user = user_array[i];
		var tr = $('<tr><td class="column-checkbox"><input type="checkbox" name="user_id" value="' + user.id + '"/></td><td></td><td>' + user.username + '</td></tr');
		
		tbody.append(tr);
	}
	
	if (len != 0) {
		var add_form = $('#add-friend-form');
		add_form.fadeIn();
		
		friend_panel.adjustSize();
	} else {
		alert('No friend fount');
	}
}

function add_friend() {
	var friends = $('.column-checkbox input');
	
	if (friends.length > 0) {
		var friend_ids = new Array();
		
		for (var i = 0; i < friends.length; i++) {
			var friend = $(friends[i]);

			if (friend.attr('checked') == true) {
				friend_ids.push(friend.val());
			}
		}
		
		if (friend_ids.length > 0) {
			var add_form = $('#add-friend-form');
			var url = add_form.attr('action');
			
			$.ajax({
				type: 'post',
				url: url,
				data: {
					friend_ids: JSON.stringify(friend_ids)
				},
				success: add_friend_success,
				error: function() {},
				complete: function() {
					$('#friend-form').removeClass('loading-red');
				}
			});
			
			$('#friend-form').addClass('loading-red');
		}
	}
	return false;
}

function add_friend_success(data, textStatus) {
	var result = JSON.parse(data);
	
	var len = result.length;
	
	var friends = $('.column-checkbox input');
	
	for (var i = 0; i < friends.length; i++) {
		var friend = $(friends[i]);
		var val = friend.val();
		
		for (var j = 0; j < len; j++) {
			if (val == result[j]) {
				friend.parent().parent().remove();
				break;
			}
		}
	}
	
	friend_panel.adjustSize();
}

function delete_friend() {
	var url = $(this).attr('href');
	$.ajax({
		type: 'get',
		url: url,
		success: delete_friend_success,
		error: function() {},
		complete: function() {}
	});
	return false;
}

function delete_friend_success(data, textStatus) {
	var friend = JSON.parse(data);
	var id = 'friend_' + friend.friend_id;
	
	$('#' + id).parent().parent().fadeOut().remove();
}

function request_friend() {
	var url = $(this).attr('href');
	$.ajax({
		type: 'get',
		url: url,
		success: function(data) {
			var result = JSON.parse(data);

			$('#operation .bd .info').text(result.message).fadeIn();
			
			if (result.status == 'ok') {
				$('#operation .bd span a#request').fadeOut();
			}
		},
		error: function(data) {},
		complete: function(data) {
			
		}
	});
	return false;
}

function descript_friendship () {
	var parent_span = $(this).parent();
	var form = $('form', parent_span);
	form.fadeIn();
	
	return false;
}

$(init);

})();

(function() {
	function _ajax_click(link, handler) {
		link.click(function(){
			var url = $(this).attr('href');

			$.ajax({
				type: 'get',
				url: url,
				success: handler.success,
				error: handler.error,
				complete: handler.complete
			});
			return false;
		});
	}
	
	function ajax_click(link_sel, handler) {
		var link_array = $(link_sel);
		
		for (var i = 0; i < link_array.length; i++) {
			var link = $(link_array[i]);
			
			_ajax_click(link, handler);
		}
	}
	
	function _ajax_submit_form(form, handler) {
		var method = form.attr('method') || 'post';
		var url = form.attr('action');
			
		var input_array = $('input, textarea', form);
			
		var submit_button = $('input[type=submit]', form);
			
		submit_button.click(function() {
			var len = input_array.length;
				
			var data = new Object();
				
			for (var i = 0; i < len; i++) {
				var input = $(input_array[i]);
				if (input.attr('type') != 'submit') {
					var name = input.attr('name');
					var value = input.val();
						
					data[name] = value;
				}
			}
				
			form.addClass('loading');
				
			$.ajax({
				url: url,
				type: method,
				data: data,
				success: handler.success,
				error: handler.error,
				complete: function(data) {
					form.removeClass('loading');
						
					handler.complete();
				}
			});
			return false;
		});
		
		var cancel_button = $('input[type=reset]', form);
		if (handler.cancel) {
			cancel_button.click(handler.cancel)
		}
	}
	
	function ajax_submit_form(form_sel, handler) {
		var form_array = $(form_sel);
		
		for (var i = 0; i < form_array.length; i++) {
			var form = $(form_array[i]);
			
			_ajax_submit_form(form, handler);
		}
	}
	
	$(function() {
		ajax_click('#poke', {
			success: function(data) {
				var result = JSON.parse(data);
				if (result.status == 'ok') {
					$('.info').html(result.message).show();
				} else {
					$('.info').html(result.message).show();
				}
			},
			error: function(data) {
			
			},
			complete: function(data) {
			}
		});
		
		var messageTemplate = '<li>' +
		'<a href="${user_link}" class="avator" target="_blank"><img src="${avator}" width="48" alt="头像"></img></a>' +
		'<div class="wall-message">' +
			'<div class="hd">' +
				'<a href="${user_link}">${username}</a><span class="gray">${gmt_create}</span>' +
			'</div>' +
			'<div class="bd">' +
			'${message}' +
			'</div>' +
		'</div>' +
		'</li>';

		
		// TODO load jquery.template.js
		try {
			var template = $.template(messageTemplate);
			
			ajax_submit_form('.wall-form', {
				success: function(data) {
					var result = JSON.parse(data);
					if (result.status == 'ok') {
						//$('.wall-tip').html(result.message).show();
						$('.wall').prepend(template, result);
					} else {
						$('.wall-tip').html(result.message).show();
					}
				},
				error: function(data) {
				
				},
				complete: function(data) {
				
				}
			});
		} catch (e) {
			
		}
	});
})();
