/* PROFILE ICONS */
var profileIcons = new Class({
	initialize: function(oUl){
		if ($type(oUl) === false){
			return;
		}
		
		this.maCallbacks = $H({});
		
		oUl.getElements('li').each(function(oEl){
			oEl.addEvent('click', (this.handleClick).bind(this));
			oEl.getElements('a').each(function(oA){
				oA.addEvent('click', (this.handleClick).bind(this));
			}, this);
		}, this);
	},
	
	register: function(sAction, oCallback){
		this.maCallbacks.include(sAction, oCallback);
	},
	
	handleClick: function(oEvent){
		oEvent.stop();
		
		var o_target = $(oEvent.target);
		if (o_target.get('tag') != 'li'){
			o_target = o_target.getParent('li');
		}
		
		if (o_target.hasClass('blurred')){
			return;
		}
		
		var s_action = o_target.get('id');
		if (!this.maCallbacks.has(s_action)){
			return;
		}
		
		this.maCallbacks[s_action].bind(o_target).call();
	}
});

/* SHOUTBOX */
var ShoutBox = new Class({
	
	Implements: Options,
	
	options: {
		'userID': null
	},
	
	initialize: function(oContainer, options){
		this.moContainer = $(oContainer);
		this.setOptions(options);
		
		this.initLinks();
		this.build();
	},
	
	initLinks: function(){
		if ($type(this.moContainer) === false){
			return;
		}
		
		$$('a.deleteShout').each(function(oA){
			oA.removeEvents();
			oA.addEvent('click', this.deleteShout);
		}, this);
		
		$$('a.approveShout').each(function(oA){
			oA.removeEvents();
			oA.addEvent('click', this.approveShout);
		}, this);
	},
	
	build: function(){
		var o_button = this.moContainer.getElement('input#b-add-shout');
		if (o_button){
			o_button.addEvent('click', this.addShout.bind(this));
		}
		
		// fix shout image links
		var a_shout_images = this.moContainer.getElements('.shoutimage');
		a_shout_images.each(function(oImage){
			oImage.addEvent('click', function(){
				top.location = '/' + this.get('text');
			}, oImage);
			oImage.setStyle('cursor', 'pointer');
		});
	},
	
	deleteShout: function(oEvent){
		oEvent.stop();
		
		var s_id;
		try {
			s_id = parseInt($(oEvent.target).get('id').replace(/shout\-delete\-(\d+)/, '$1'), 10);
		} catch(oEx){
			return;
		}
		
		// check parents
		var o_parent = this.getParents('div[id^=shout-]');
		if (o_parent.length === 0){
			return;
		}
		
		// check for confirm text
		var s_confirm_text = $('shout-delete-text').get('text');
		if (!confirm(s_confirm_text)){
			return false;
		}
		
		var o_shout = o_parent[0];
		o_shout.set('tween', {duration: 'fast'});
		(new Request({
			'url': '/ajax/delete_shout/',
			'method': 'post',
			'data': $H({
				'shoutid': s_id
			}).toQueryString(),
			'onComplete': function(){
				o_shout.slide('out');
			}
		})).send();
	},
	
	approveShout: function(oEvent){
		oEvent.stop();
		
		var s_id;
		try {
			s_id = parseInt($(oEvent.target).get('id').replace(/shout\-approve\-(\d+)/, '$1'), 10);
		} catch(oEx){
			return;
		}
		
		var o_parent = this.getParents('div[id^=shout-]');
		if (o_parent.length === 0){
			return;
		}
		
		var o_shout = o_parent[0];
		(new Request({
			'url': '/ajax/approve_shout',
			'method': 'post',
			'data': $H({
				'shoutid': s_id
			}).toQueryString(),
			'onComplete': (function(){
				o_shout.removeClass('unapproved');
				$(oEvent.target).getParent().destroy();
			}).bind(this)
		})).send();
	},
	
	addShout: function(){
		// capture text
		var o_shoutlist, s_text = this.moContainer.getElement('textarea').get('value').trim();
		if (s_text.length === 0){
			return;
		}
		
		this.moContainer.getElement('textarea').set('value', '');
		
		// list
		o_shoutlist = this.moContainer.getElement('div#shoutList');
		
		(new Request({
			url: '/ajax/shout/',
			data: $H({
				'message': s_text,
				'userid': this.options.userID
			}).toQueryString(),
			onComplete: (function(s_html){
				var o_shout = new Element('div').set('html', s_html);
				o_shout.inject(o_shoutlist, 'top');
				var oFx = new Fx.Scroll(window);
				oFx.toElement('shoutboxContainer');
				
				this.initLinks();
			}).bind(this)
		})).send();
	}
});

/* RUNTIME */
var i_profile_id, s_profile_name, o_photo_slider,

toggleExtraStats = function(oEvent) {
	// hide add buddy layer
	if ($('addBuddyLayer')){
		$('addBuddyLayer').addClass('hidden');
	}
	
	// open or close
	if (this.hasClass('profileMoreInfoOff')){
		this.removeClass('profileMoreInfoOff').addClass('profileMoreInfoOn');
		$('profileStats').slide('in');
	} else {
		this.removeClass('profileMoreInfoOn').addClass('profileMoreInfoOff');
		$('profileStats').slide('out');
	}
},

enableBirthdayAlert = function(){
	(new Request({
		'url': '/ajax/add_birthdayalert/',
		'data': $H({
			'userid': i_profile_id
		}).toQueryString(),
		'onComplete': function(){
			location = '/my/friends/alerts/';
		}
	})).send();
},

sendMessage = function(){
	if ($type(o_messenger) === false){
		location = '/accessdenied/';
		return;
	}
	
	o_messenger.sendMessage(s_profile_name);
},

addBuddy = function(){
	if (typeof o_messenger != 'object'){
		location = '/accessdenied/';
		return;
	}
	
	if (!$('addBuddyLayer')){
		return;
	}
	
	$('addBuddyLayer').setStyles({
		'left': (this.getPosition().x + this.getScrollSize().x),
		'top': (this.getPosition().y - 7)
	});
	
	$('addBuddyLayerSubmit').addEvent('click', (function(){
		$('addBuddyLayerSubmit').addClass('hidden');
		$('addBuddyLayerLoading').removeClass('hidden');
		
		var o_data = $H({});
		$$('div#addBuddyLayer input').each(function(oEl){
			if (oEl.checked !== true){
				return;
			}
			o_data[oEl.name] = true;
		});
		o_data.buddyid = i_profile_id;
		
		(new Request({
			'url': '/ajax/add_request',
			'method': 'post',
			'data': o_data.toQueryString(),
			'onComplete': (function(){
				$('addBuddyLayerLoading').addClass('hidden');
				$('addBuddyLayerContent').addClass('hidden');
				$('addBuddyLayerDone').removeClass('hidden');
				(function(){
					$('addBuddyLayer').addClass('hidden');
					this.addClass('blurred');
				}).bind(this).delay(1000);
			}).bind(this)
		})).send();
		
	}).bind(this)).setStyle('cursor', 'pointer');
	
	$('addBuddyLayerCancel').addEvent('click', function(){
		$('addBuddyLayer').addClass('hidden');
	});
	
	$('addBuddyLayer').removeClass('hidden');
},

addFavorite = function(){
	if (typeof o_messenger != 'object'){
		location = '/accessdenied/';
		return;
	}
	
	this.addClass('loading');
	
	(new Request({
		'url': '/ajax/add_favorite/',
		'method': 'post',
		'data': $H({
			'userid': i_profile_id
		}).toQueryString(),
		'onComplete': (function(sResponse){
			if (sResponse === 'x'){
				location = '/my/friends/favorites/full/';
				return;
			}
			
			this.removeClass('loading').addClass('blurred');
		}).bind(this)
	})).send();
},

removeTraces = function(){
	if (typeof o_messenger != 'object'){
		location = '/accessdenied/';
		return;
	}
	
	if (this.hasClass('goldmember')){
		location = '/goldmember/';
		return;
	}
	
	this.addClass('loading');
	
	(new Request({
		'url': '/ajax/remove_traces/',
		'data': $H({
			'userid': i_profile_id
		}).toQueryString(),
		'onComplete': (function(){
			this.removeClass('loading').addClass('blurred');
		}).bind(this)
	})).send();
},

addAlert = function(){
	if (typeof o_messenger != 'object'){
		location = '/accessdenied/';
		return;
	}
	
	(new Request({
		'url': '/ajax/add_onlinealert/',
		'data': $H({
			'userid': i_profile_id
		}).toQueryString(),
		'onComplete': function(){
			location = '/my/friends/alerts/';
		}
	})).send();
},

reportProfile = function(){
	var i_height = 290;
	if (Browser && navigator.userAgent.match(/chrome/i)){
		i_height += (Browser.Platform.mac === true ? 60 : 8);
	}
	
	window.open('/report_profile.html?userid=' + i_profile_id, 
		'report_profile_' + i_profile_id, 
		'width=548,height=' + i_height + ',location=false,status=false,menubar=false,directories=false,toolbar=false,resizable=false,scrollbars=false');
};

window.addEvent('domready', function(){
	// init properties
	i_profile_id = parseInt($('profile-userid').get('text'), 10);
	s_profile_name = $('profile-username').get('text').trim();
	
	// show extra stats
	if ($('profileStats')){
		// hide
		$('profileStats').slide('hide');
		// define slide
		$('profileStats').set('slide', {
			duration: 'normal', 
			transition: Fx.Transitions.Expo.easeOut
		});
		
		$('profileMoreInfo').addEvent('click', toggleExtraStats);
	}
	
	// slideshows
	$A(['photo', 'video', 'friends']).each(function(sType){
		if (!($(sType + 'Container'))){
			return;
		}
		
		var o_slider = new SlideShow(sType + 'Container', {
			'url': '/json/profile/' + i_profile_id + '/' + sType + '.json',
			'hideTypeAndCaption': (sType != 'friends')
		});
		
		// bind photo slider
		if (sType == 'photo'){
			o_photo_slider = o_slider;
		}
	});
	
	// make profile photo clickable
	if ($('profilePhotoBox')){
		$('profilePhotoBox').addEvent('click', (function(oEvent){
			var a_images = [];
			if ($type(o_photo_slider)){
				a_images = o_photo_slider.getContent();
			}
		
			try {
				var a_photo = $(oEvent.target).getStyle('background-image').match(/http:\/\/(.+)\.jpg/), 
					s_photo;
				if (a_photo !== null && a_photo.length > 1){
					// prepend profile image to image list
					s_photo = a_photo[0].replace(/fullsize\.jpg$/, 'original.jpg');
					a_images = $A([[s_photo, s_profile_name]]).combine(a_images);
				}
			} catch (oEx){}
			
			(new QuickBox(a_images)).open(0);
		}).bind(this));
	}
	
	// lose unnecessary detail dl's
	$A(['general', 'body', 'sex']).each(function(s_type){
		if ($('details-' + s_type) && $('details-' + s_type).getElements('dd').length < 2){
			$('details-' + s_type).destroy();
		}
	});
	
	// birthday alert
	if ($('profileBirthdayAlert')){
		$('profileBirthdayAlert').addEvent('click', enableBirthdayAlert);
	}
	
	// init profile icons
	try {
		var o_pi = new profileIcons($$('div.profileIcons ul')[0]);
		// sendMessage
		o_pi.register('sendMessage', sendMessage);
		// addBuddy
		o_pi.register('addBuddy', addBuddy);
		// addFavorite
		o_pi.register('addFavorite', addFavorite);
		// removeTraces
		o_pi.register('removeTraces', removeTraces);
		// addAlert
		o_pi.register('addAlert', addAlert);
		// reportProfile
		o_pi.register('reportProfile', reportProfile);
	} catch (x){}
	
	// init shoutbox
	if ($('shoutboxContainer')){
		(new ShoutBox('shoutboxContainer', {
			'userID': i_profile_id
		}));
	}
	
	// init comment box
	if ($('profileComment')){
		$('commentMessage').addEvent('blur', function(oEvent){
			var s_text = $(oEvent.target).get('value').trim();
			var i_userid = parseInt($('profile-userid').get('text').trim(), 10);
			(new Request({
				'url': '/ajax/save_comment/',
				'method': 'post',
				'data': $H({
					'userid': i_userid,
					'comment': s_text
				}).toQueryString(),
				'onComplete': function(s_response){
					$('commentMeta').set('text', $('commentSaved-text').get('text'));
					$('commentMeta').addClass('commentSaved');
				}
			})).send();
		});
	}
	
	if ($$('div.weblogBody').length > 0){
		try {
			(new Weblog(i_profile_id));
		} catch (x){}
	}
});
