var BF_UserSwitcher = {
	controller : '/buzzfeed/_switch',
	template : '<li><a href="" onclick="return false" class="switch-to-user" rel:id="#{id}"><img src="#{root}#{image}"/>#{display_name}</a></li>',
	show_warning : function() {
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			var user_info = user.getUserInfo();
			if ( !window.location.pathname.match('/dashboard$') && typeof user_info.default_user != 'undefined' && user_info.default_user.username != user_info.username ) {
				$$('.switched-display_name').each(function(el){el.update(user_info.display_name)});
				$$('.switch-warning').each(function(el){el.show()});
			}
			else {
				$$('.switch-warning').each(function(el){el.hide()});
			}
		}
	},
	disable_private_fields : function(){
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			var user_info = user.getUserInfo();
			if ( typeof user_info.default_user != 'undefined' && user_info.default_user.username != user_info.username ) {
				var private_fields = ['user-settings-button'];
				private_fields.each( function(el){ if ($(el)) $(el).style.display = 'none';} );
			}
		}
	},
	switch_list_ui : function(e) {
		e.stop();
		if ($('switch-list-spinner')) $('switch-list-spinner').show();
		BF_UserSwitcher.getSwitchList( BF_UserSwitcher._switch_list_ui );
	},
	_switch_list_ui : function( list ) {
		var t = new Template( BF_UserSwitcher.template );
		var output = '<a class="close_switch_list_ui" href="#" onclick="BF_UserSwitcher.hide_switch_list_ui();return false;"><img src="'+BF_STATIC.static_root+'/images/public/video-lightbox/closebox.png" alt="Close"/></a><ul>';
		var user_info = (new BF_User()).getUserInfo();
		var default_user_image = (typeof user_info.default_user.image == 'undefined' || user_info.default_user_image == null ) ? '' : user_info.default_user.image;
		if ( default_user_image == null || default_user_image == '' ) default_user_image = '/static/images/public/defaults/user.jpg';
		list.unshift({
			image:unescape(default_user_image),
			display_name:unescape(user_info.default_user.display_name),
			userid:unescape(user_info.default_user.userid)
		});
		list.each( function(user){
			if ( typeof user.image == 'undefined' || user.image == '' || user.image==null ) user.image='/static/images/public/defaults/user.jpg'
			output += t.evaluate({image:user.image,display_name:user.display_name,id:user.userid,root:BF_STATIC.image_root})
		});
		if ( user_info.p_alias == 'true' || (typeof user_info.default_user != 'undefined' && user_info.default_user.p_alias=='true')) {
			output += '<li><a href="'+BF_STATIC.web_root+'/signup"><img src="'+BF_STATIC.static_root+'/images/public/icons/new-microsite.png" alt="" width="25" height="25" /><i>Create Another BuzzFeed</i></a></li>';
		}
		$('usernav-switch-list').update(output+ '</ul>');
		$('usernav-switch-list').show();
		if ($('switch-list-spinner')) $('switch-list-spinner').hide();
		$$('.switch-to-user').each(function(el){
			el.observe('click',function(e){
				e.stop();
				var id = e.target.getAttribute('rel:id');
				BF_UserSwitcher.switchTo(id, function(){ window.location.reload(); } );
			})
		});
	},
	hide_switch_list_ui : function(){
		$('usernav-switch-list').hide();
	},
	switchTo : function( id, callback ) {
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			var user_info = user.getUserInfo();
			if ( typeof user_info.default_user != 'undefined' ) {
				
				// do nothing if they select the same user...
				if(user_info.userid == id) {
					
					$('usernav-switch-list').hide();
					if ($('switch-list-spinner')) $('switch-list-spinner').hide();
										
				} else {
					$('usernav-switch-list').hide();
					if ($('switch-list-spinner')) $('switch-list-spinner').show();
					var ajax = new BF_Request();
					ajax.request(BF_UserSwitcher.controller,{
						method:'post',
						parameters:{
							action:'switch',
							default_username:user_info.default_user.username,
							default_session_key:user_info.default_user.session_key,
							switch_id : id
						},
						onSuccess:function(r){BF_UserSwitcher._switchTo(r,callback)}
					});
				}
			}
		}
	},
	_switchTo : function(r, callback){
		bf_login.loggedIn(r);
		//if ($('switch-list-spinner')) $('switch-list-spinner').hide();
		facebook.logout(callback);
	},
	getSwitchList : function(callback) {
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			var user_info = user.getUserInfo();
			if ( typeof user_info.default_user != 'undefined' ) {
				var ajax = new BF_Request();
				ajax.request(BF_UserSwitcher.controller,{
					method:'post',
					parameters:{
						action:'switch_list',
						default_username:user_info.default_user.username,
						default_session_key:user_info.default_user.session_key
					},
					onSuccess:function(r){BF_UserSwitcher._getSwitchList(r.responseText,callback)}
				});
			}
		}
	},
	_getSwitchList : function( responseText, callback ) {
		var obj = eval( '('+responseText+')' );
		if ( obj.success == '1' ) {
			callback( obj.switch_list );
		}
	},
	create_alias : function( args, callback ) {
		if ( typeof args.username == 'undefined' || typeof args.display_name == 'undefined' ) {
			BF_UserSwitcher._create_alias({status:500,responseText:Object.toJSON({success:0,message:'Oops! You need to tell us your desired URL'})},callback);
			return;
		}
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			var user_info = user.getUserInfo();
			if ( typeof user_info.default_user != 'undefined' ) {
				var ajax = new BF_Request();
				ajax.request(BF_UserSwitcher.controller,{
					method:'post',
					parameters:{
						action:'add_alias',
						username: args.username,
						display_name : args.display_name,
						default_username:user_info.default_user.username,
						default_session_key:user_info.default_user.session_key
					},
					onSuccess:function(r){BF_UserSwitcher._create_alias(r,callback)},
					onFailure:function(r){BF_UserSwitcher._create_alias(r,callback)}
				});
			}
			else {
				BF_UserSwitcher._create_alias({status:500,responseText:Object.toJSON({success:0,message:'Insufficient privileges'})},callback);
			}
		}
		else {
			BF_UserSwitcher._create_alias({status:500,responseText:Object.toJSON({success:0,message:'User not logged in'})},callback);
		}
	},
	_create_alias : function( r, callback ) {
		var obj = eval( '('+ r.responseText +')' );
		obj.status = r.status;
		callback( obj );
	},
	count_aliases : function( callback ) {
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			var user_info = user.getUserInfo();
			if ( typeof user_info.default_user != 'undefined' ) {
				var ajax = new BF_Request();
				ajax.request(BF_UserSwitcher.controller,{
					method:'post',
					parameters:{
						action:'count_aliases',
						default_username:user_info.default_user.username,
						default_session_key:user_info.default_user.session_key
					},
					onComplete:function(r){BF_UserSwitcher._count_aliases(r,callback)}
				});
			}
		}
	},
	_count_aliases : function( r, callback ) {
		var obj = eval( '('+ r.responseText +')' );
		obj.status = r.status;
		callback( obj );
	}
}
