var user_helper = {
    connected_user_id: null,
    connected_user_name: null,
    connected_user_image_url: null,
    connected_user_email: null,
    trench_login_action_page: null,
    trench_logout_action_page: null,
    
    set_user_details: function set_user_details(user_id, user_name, user_image_url, user_email){
        user_helper.connected_user_id = user_id;
        user_helper.connected_user_name = user_name;
        user_helper.connected_user_image_url = user_image_url;
        user_helper.connected_user_email = user_email;
        
        // If the SWF is loaded call it right now.
        flash_handler.set_user_details_on_flash();
    },
		
    account_is_suspended: function account_is_suspended(popup_html){
        user_helper.loginCallbackFiredBefore = false;
        user_helper.user_banned_popup = new popup({is_iframe: false, popup_holder: '#popup_holder', frame_width: 300, frame_height: 115, backdrop_color: 'black', border_width: 6, border_color: '#2B2B2B', border_opacity: 1});
        user_helper.user_banned_popup.Open(popup_html);
        user_helper.hide_flash();
	  },
    close_user_banned_popup: function close_user_banned_popup(){
        user_helper.unhide_flash();
        user_helper.user_banned_popup.Close();
    },
    
    // Login funcs
    trench_user_login: function trench_user_login(){
    		// Hide flash content to prevent layering issues.
        if (flash_handler.swf_ref != null || user_helper.get_terms_accepted()) {
          user_helper.hide_flash();
          user_helper.facebook_login();
        }
        else {
          user_helper.terms_popup = new popup({is_iframe: false, popup_holder: '#popup_holder', frame_width: 447, frame_height: 370, border_width: 6, border_color: '#2B2B2B', border_opacity: 1});
          user_helper.terms_popup.Open($('#fc_explanation_popup').html());

          $('.close_btn', user_helper.terms_popup.frame).click(function(){
            user_helper.terms_popup.Close();
          });
          
          $('#terms_accepted_checkbox', user_helper.terms_popup.frame).click(function(){
            $('#popup_fb_connect_button', user_helper.terms_popup.frame).css('visibility', this.checked ? 'visible' : 'hidden');
          });
          
          $('#fb_connect_details_link', user_helper.terms_popup.frame).click(user_helper.open_fb_connect_details_popup);

          
          $('#popup_fb_connect_button', user_helper.terms_popup.frame).click(function(){
            user_helper.set_terms_accepted(true);
            user_helper.terms_popup.Close();
            user_helper.facebook_login();
          });
          
                    
          $('.terms_link', this.terms_popup.frame).click(user_helper.open_terms_popup)
        }
    },
    
    facebook_login: function(){
        // see http://forum.developers.facebook.com/viewtopic.php?pid=165562#p165562
        // and http://bugs.developers.facebook.com/show_bug.cgi?id=3757
        FB.ensureInit(function(){
            FB.Connect.requireSession(user_helper.trench_user_login_callback, function() { user_helper.unhide_flash(); });
        });
        return false;      
    },
    
    trench_user_login_callback: function trench_user_login_callback(ret){
        // Extended permissions are required to publish to the stream.
        if (!user_helper.loginCallbackFiredBefore) {
          user_helper.loginCallbackFiredBefore = true;
          FB.Connect.showPermissionDialog("publish_stream", user_helper.trench_permission_dialog_callback);
        }
    },
		
    trench_permission_dialog_callback: function trench_permission_dialog_callback(result){
        if (user_helper.trench_login_action_page != null) {
            $.ajax({
                url: user_helper.trench_login_action_page,
                async: true,
                success: user_helper.update_login_status
            });
        }
    },
    
	  // Logout funcs
    trench_user_logout: function trench_user_logout(){
        user_helper.hide_flash();
        user_helper.loginCallbackFiredBefore = false;
        FB.ensureInit(function(){
            FB.Connect.logout(user_helper.trench_user_logout_callback);
        });
        return false;
    },
		
    trench_user_logout_callback: function trench_user_logout_callback(){
        user_helper.unhide_flash();
        $.ajax({
            url: user_helper.trench_logout_action_page,
            async: true,
            success: user_helper.update_login_status
        });
    },
	
    trench_admin_logout: function trench_admin_logout(){
  		FB.ensureInit(function(){
  			FB.Connect.ifUserConnected(FB.Connect.logoutAndRedirect('/admin/logout'), '/admin/logout');
  		});
  		return false;
    },
    
    // gets called with ajax login/logout
    update_login_status: function update_login_status(html){
        
				// reloads entire page if var is set
        if (typeof(login_requires_refresh) != 'undefined') {
            window.top.location.reload();
        }
        else {
					  // update login/logout html
            if (document.getElementById("user_menu")) {
                document.getElementById("user_menu").innerHTML = html;
                if (FB.XFBML.Host.parseDomTree) 
                    setTimeout(FB.XFBML.Host.parseDomTree, 0);
            }
						
						// unhide flash if on flash page
						user_helper.unhide_flash();

            // update user details
            var temp_div = document.createElement('div');
            temp_div.innerHTML = html;
            var script = $('script', temp_div).html();
            eval(script);
        }        
    },
    
		hide_flash: function hide_flash(){
      $('#flashContent').css('margin-left', '-5000px');
    },
		
    unhide_flash: function unhide_flash(){
      $('#flashContent').css('margin-left', '0px');
    },
    
    set_terms_accepted: function set_terms_accepted(accepted){
      document.cookie = 'accepted_terms=' + accepted + '; expires=' + (new Date(3000, 1, 1)).toGMTString() + ';';
    },
    
    get_terms_accepted: function get_terms_accepted(){
      return document.cookie.indexOf('accepted_terms=true') > -1;
    },
    
    open_fb_connect_details_popup: function open_fb_connect_details_popup(){
      user_helper.fb_connect_details_popup = new popup({popup_holder: '#popup_holder', frame_width: 500, frame_height: 500, backdrop_color: 'transparent', border_width: 6, border_color: '#2B2B2B', border_opacity: 1})
      user_helper.fb_connect_details_popup.Open(this.href);
      return false;
    },
    
    open_terms_popup: function open_terms_popup(){
      user_helper.full_terms_popup = new popup({popup_holder: '#popup_holder', frame_width: 460, frame_height: 400, backdrop_color: 'transparent', border_width: 6, border_color: '#2B2B2B', border_opacity: 1})
      var href_parts = this.href.split('#');
      var href = href_parts[0] + '?layout=iframe';
      if (href_parts[1] != null) href += '#' + href_parts[1];
      user_helper.full_terms_popup.Open(href); 
      return false;     
    }
}

// hooks to allow flash to work with the user_helper 
trench_user_login = user_helper.trench_user_login
trench_user_logout = user_helper.trench_user_logout
