//----------------
// groups
//
// groups js functions
// jeremiah robison
// 10.18.2008
//----------------

var Groups = {};

Groups.on_ready = function(){
};

Groups.init_profile = function(){

  // Initialize member list with first 9
  Groups.get_members(9);

  // Start the tutorial if someone is invited to a group
  if( Groups.is_invited ){
    Groups.overlay_tutorial();
  }
  if( Groups.show_invite_on_load ){
    Groups.on_click_invite_to_group();
  }

};

/**
 * Invitee tutorial
 */
Groups.overlay_tutorial = function(){
  AppBase.ual('group_invite_overlay_display');
  bu.popup(DIV({'class':'tutorial_overlay'},
    DIV({'class':'overlay_mugshot'},Groups.owner.render_mugshot({'frame':true})),
    P({},translate('you_have_been_invited_to_group', Groups.profile.display_name, Groups.owner.display_name)),
    BUTTON({'class':'big_yellow_button', 'onclick':Groups.on_click_join_group_from_tutorial}, translate('join_group')),
    A({'onclick':function(){Groups.on_click_no_thanks_from_tutorial('join');}}, translate('no_thanks')),
    DIV({'style':'clear:both'})
  ),{dim:true});
};

Groups.on_click_join_group_from_tutorial = function(){
  AppBase.ual('group_invite_overlay_join');
  Groups.on_successful_join_from_tutorial();
  Groups.on_click_join({on_success:function(){}});
};

Groups.on_successful_join_from_tutorial = function(response){
  bu.popup(DIV({'class':'tutorial_overlay'},
    DIV({'class':'overlay_mugshot'},Groups.owner.render_mugshot({'frame':true})),
    P({},translate('thanks_for_joining_add_photos')),
    BUTTON({'class':'big_yellow_button', 'onclick':Groups.on_click_add_photos_from_tutorial}, translate('add_photos')),
    A({onclick:function(){Groups.on_click_no_thanks_from_tutorial('add_photos');}}, translate('no_thanks')),
    DIV({'style':'clear:both'})
  ));
};

Groups.on_click_add_photos_from_tutorial = function(){
  AppBase.ual('group_invite_overlay_add_photos');
  if( Groups.visitor_has_channels === true ){
    bu.popup.close();
    show_picker(Groups.picker_swf, Groups.permission);
  }else{
    bu.relocate('/arrange?for_gpuid='+escape(Groups.profile.puid));
  }
};

Groups.on_click_no_thanks_from_tutorial = function(context){
  if( context === 'join' ){
    AppBase.ual('group_invite_overlay_no_join');
  }else if( context === 'add_photos' ){
    AppBase.ual('group_invite_overlay_no_add_photos');
  }
  bu.popup(DIV({'class':'tutorial_overlay'},
    DIV({'class':'overlay_mugshot'},Groups.owner.render_mugshot({'frame':true})),
    P({}, translate('remember_to_add_comments')),
    DIV({'style':'clear:both'})
  ));
  setTimeout(bu.popup.close, 3000);
};

// End invitee tutorial

Groups.channelTemplate = new api.Channel.Template();

Groups.tab = '';
Groups.tab_time = null;
Groups.valid_tab = function(tab) {

  for (var i=0; i<Groups.tabs.length; i++) {
    if (tab == Groups.tabs[i]) {
      return true;
    }
  }
  return false;
};

Groups.read_fragment = function() {

  var fragment = window.location.hash.split('-');
  var new_tab = fragment[1];
  if (!Groups.tabs || !Groups.valid_tab(new_tab)) {
    new_tab = 'new';
  }
  if (new_tab != Groups.tab) {
    Groups.tab = new_tab;
    return true;
  }
  return false;
};

Groups.tab_set = function(tab) {
  window.location.hash = '-'+tab;
  Groups.reload_channels();
  return false;
};

Groups.tab_check = function() {
  if (Groups.tab_timer) {
    clearTimeout(Groups.tab_timer);
  }
  if (Groups.read_fragment()) {
    Groups.reload_channels();
  }
  Groups.tab_timer = setTimeout(Groups.tab_check, 1000);
};

Groups.reload_channels = function() {
  getObject('feed').innerHTML = '';
  Groups.load_channels(Groups.puid, 0, Groups.profile, Groups.tabs);
};

Groups.get_members = function( count ){
  Groups._get_members_count = count;
  api.Group.get_members(Groups.puid, count, Groups.render_members);
};

Groups.update_members = function(){
  Groups.get_members(Groups._get_members_count);
};


Groups.render_members = function(members, total_count){
  var target_e = $('#api_member_list');
  var target = target_e[0];
  target_e.empty();
  for( var i = 0; i < members.length; i++ ){
    var mem = members[i];
    var ban_link = A({'href':'#',
		       'class':'groups_ban_control',
		       'onclick':'Groups.on_click_ban("'+mem.puid+'"); return false;'
		      },'ban');
    if( AppBase.user && AppBase.user.puid == mem.puid ){
      ban_link = SPAN({}); // Prevents foot-shooting
    }
    var mem_e = DIV({'class':'left friend'},
		    ban_link,
		    A({'href':mem.profile_url,
		     'title':mem.display_name},
		       IMG({'src':mem.profile_thumb}),
		       BR({}),
		       mem.display_name
		    )
		  );
    target.appendChild( mem_e );
  }
  target.appendChild(DIV({'class':'breakline'}));
  if( members.length < total_count ){
    var member_control = DIV({'class':'member_control'},
			   A({'href':'#','onclick':'Groups.get_members(); return false'},
			     translate('see_all_members', total_count)
			   )
			 );
    target.appendChild( member_control );
  }
  if( Groups.is_moderator ){
    var member_control = DIV({'class':'member_control'},
			   A({'href':'#','onclick':'$(".groups_ban_control").toggle(); return false'},
			     translate('group_ban_members')
			   )
			 );
    target.appendChild( member_control );
  }
};


Groups.set_tabs = function(tabs) {
  if (tabs) {
    Groups.tabs = tabs;
  }
};

Groups.render_tabs = function() {
  if (Groups.tabs) {
    var tabs = Groups.tabs;
    var tab_nodes = UL({});
    for (var i=0; i<tabs.length; i++) {
      tab_nodes.appendChild(LI({'id':'tab_'+tabs[i],
                                'class':(Groups.tab == tabs[i]) ? 'selected' : '',
                                'onclick':'AppBase.ual("click_'+tabs[i]+'");return Groups.tab_set("'+tabs[i]+'");'
			       },
			       A({'href':'#',
				  'class':'profile_tab'
				 },
				 translate('tab_'+tabs[i])
				)));
                      }
    tab_nodes.appendChild(DIV({'class':'breakline'}));
    $('#main_navigation').html(tab_nodes);
  }
};

Groups.empty_channels = function() {
  var messageDiv = DIV({'class':'no_channels'}, translate('no_channel_'+Groups.tab));
  getObject('feed').appendChild(messageDiv);
};


Groups.upload_success = function(response) {
	getObject('mug').src = response['deco_url'];
	Groups.mugshot_url = response['img_url'];
};

Groups.load_channels = function(puid, psid, profile, tabs) {

  if( profile && profile.view ){
    Groups.channelTemplate.set_view( profile.view );
  }
  Groups.channelTemplate.set_puid( puid );
  Groups.set_tabs(tabs);
  Groups.read_fragment();
  Groups.render_tabs();
  Groups.puid = puid;
  Groups.psid = psid;
  if (profile) {
    Groups.profile = new api.Group(profile);
  }
  $('#loading').show();

  api.Channel.fetch(puid, psid, Groups.tab, Groups.on_load_channels );

  return false;
};

Groups.on_load_channels = function(channels, users, li_nxuid, psid ) {
  $('#loading').hide();

  if( channels.length ){
    for(var i=0; i<channels.length; i++) {
      var story = Groups.channelTemplate.render_channel( channels[i] );
      getObject("feed").appendChild(story);
    }
    Groups.display_more(Groups.puid, psid);
  }else{
    $('#feed').html(DIV({'style':'margin-top:25px'},
      translate('no_slideshows_yet_'+Groups.tab), '&nbsp&nbsp',
      (Groups.tab === 'sub' ? SPAN() :
        A(
          {
            'href':'#',
            'onclick':function(){
              $('.add_show_to_group_button').click();
              return false;
            },
            'style':'font-size:10pt'
          },
          translate('add_one')
        )
      )
    ));
  }
  Groups.tab_check();
};

Groups.display_more = function(puid, psid) {
  if (psid=='') {
    $('#more').hide();
  } else {
    $('#more').show();
    getObject('more').innerHTML='<input type="button" onclick="Groups.load_channels(\''+puid+'\',\''+psid+'\')" value="'+translate('More')+'"/>';
  }
};

Groups.on_click_invite_to_group = function(){
  if( AppBase.user ){
    var sharer = Sharer.initialize({
      'to_share' : Groups.profile,
      'do_forward_to_live' : false,
      'on_finished' : Sharer.thank_and_close
    });

    var thumb_url = AppBase.redeco(Groups.profile_image, {'width':'45','height':45});
    sharer.find("#header_image_container").html(IMG({'src':thumb_url, 'class':'thumb'}));

    var abbrev_name = lu.abbreviate(Groups.profile_name, {'unescape_HTML':true});
    sharer.find('#header_container').html(H2({},translate('invite_to_see', abbrev_name)));
    var on_close = function(){sharer.find("H2").remove(); sharer.find(".thumb").remove();};
    bu.popup(sharer, {'dim':true, 'closable':true, 'padding':'10px', 'on_close':on_close, 'classname':'group_invite', 'width':'380'});
  }else{
    AppBase.show_login(translate("group_invite_requires_login"), Groups.join);
  }
};

Groups.on_click_join = function(options){
  options = lu.defaulted(options, {});
  if( AppBase.user ){
    Groups.join({on_success:options.on_success});
  }else{
    AppBase.show_login(translate("group_join_requires_login"), Groups.join);
  }
};
// options may include
//   on_successful_join
Groups.join = function( options ){
  options = lu.defaulted(options, {});
  AppBase.post('/groups',
    {
      'xaction' : 'join',
      'puid' : Groups.puid
    },
    ( options.on_success || Groups.on_successful_join)
  );
};

Groups.on_successful_join = function(response){
  window.location.reload();
};

Groups.on_click_leave = function(){
  bu.popup( Groups.leaver() );
};
Groups.leaver = function(){
  var remove_content_checkbox = $('<input id="also_remove_content_checkbox" type="checkbox"/>')[0];
  var leaver = DIV({'id':'group_leaver'},
    DIV({},
      translate('confirm_leave_group')
    ),
    DIV({'class':'leaver_buttons'},
      $('<input id="confirm_leave_group_button" type="submit" value="'+ translate('confirm_button') +'"/>').click(Groups.leave)[0],
      A({'id':'group_leaver_cancel_button', onclick:function(){bu.popup.close();}},
        translate('cancel_button')
      )
    ),
    DIV({},
      remove_content_checkbox, SPAN({'id':'also_remove_my_content_prompt'}, translate('also_remove_my_content'))
    )
  );
  return leaver;
};
Groups.leave = function(){
  var parameters = {
    'xaction' : 'leave',
    'puid' : Groups.puid
  };
  if($('#also_remove_content_checkbox')[0].checked){ parameters.remove_content = true; }
  AppBase.post('/groups',
    parameters,
    Groups.on_successful_leave
  );
};
Groups.on_successful_leave = function(response){
  bu.relocate(Serdes.make_command_url('/groups',{'puid':Groups.profile.puid}));
};

Groups.on_click_ban = function(puid){
  bu.popup( Groups.banner(puid) );
};
Groups.banner = function(puid){
  var banner = DIV({'id':'group_banner'},
    DIV({},
      translate('confirm_ban_from_group')
    ),
    DIV({'class':'banner_buttons'},
      $('<input id="confirm_ban_from_group_button" type="submit" value="'+ translate('confirm_button') +'"/>').click(function(){Groups.ban([puid]);})[0],
      A({'id':'group_banner_cancel_button', onclick:function(){bu.popup.close();}},
        translate('cancel_button')
      )
    ),
    DIV({},
      SPAN({'id':'this_will_remove_content'}, translate('this_will_remove_content'))
    )
  );
  return banner;
};
Groups.ban = function(puids){
  AppBase.post('/groups',
    {
      'xaction' : 'ban',
      'puid' : Groups.puid,
      'banned_puids' : puids
    },
    Groups.on_successful_ban
  );
};
Groups.on_successful_ban = function(response){
  window.location.reload();
};


Groups.on_click_remove = function(puid){
  bu.popup( Groups.remover(puid) );
};
Groups.remover = function(puid){
  var remover = DIV({'id':'group_remover'},
    DIV({},
      translate('confirm_remove_group')
    ),
    DIV({'class':'remover_buttons'},
      $('<input id="confirm_remove_group_button" type="submit" value="'+ translate('confirm_button') +'"/>').click(function(){Groups.remove();})[0],
      A({'id':'group_remove_cancel_button', 'onclick':function(){bu.popup.close();}},
        translate('cancel_button')
      )
    ),
    DIV({},
      SPAN({'id':'cannot_unremove_notice'}, translate('cannot_unremove_notice'))
    )
  );
  return remover;
};
Groups.remove = function(){
  AppBase.post('/groups',
    {
      'xaction' : 'remove',
      'puid' : Groups.puid
    },
    Groups.on_successful_remove
  );
};

Groups.on_successful_remove = function(response){
  bu.relocate('/profile?puid='+AppBase.user.puid);
};

var submit_group_channel = function(nxcid) {
  api.Channel.submit_group(nxcid, Groups.puid, function(result){
    if( result && result['error'] === 'group_removed' ){
      bu.relocate('/profile?puid='+Groups.puid);
    }
    var location = window.location.toString();
    location = location.split('#');
    location[0] = location[0] + '&channel_submitted=1';
    location = location.join('#');
    bu.relocate(location);
    /* removing pretty ajax for now
    Groups.update_members();
    Groups.tab_set(Groups.tab);
    */
  });
  hide_picker();
};

var remove_group_channel = function(nxcid, id) {
  api.Channel.remove_group(nxcid, Groups.puid, function(result){
			     $('#'+id).hide();
			     Groups.update_members();
			   });
  return false;
};



var flag_group_channel = function(nxcid, id) {
  api.Channel.flag_group(nxcid, Groups.puid, function(result){
			   $('#'+id).hide();
			 });
  return false;
};

var approve_group_channel = function(nxcid, id) {
  api.Channel.approve_group(nxcid, Groups.puid, function(result){
			      $('#'+id).hide();
			    });
  return false;
};

	var load_my_channels = function() {
		AppBase.post(
			'/profile',
			{'xaction' : 'get_my_channels'},
			show_my_channels
		);
	};

	var show_my_channels = function(result) {

	  $('#my_channels').html(A({'href':'#',
				    'onclick':function() {$('#my_channels').hide();return false;}
				   },
				   translate('close_menu')
				  ));

	  for (var i=0; i<result.length; i++) {
	    var nxcid = result[i];
	    var node = DIV({},
			 A({'href':'#',
			    'onclick':'submit_group_channel("'+nxcid+'");return false;'
			   },
			   nxcid
			  ));
			$('#my_channels').append(node);
		}
	    $('#my_channels').show();
	};

	var show_picker = function(swf_src, permission) {
	    getObject('my_picker').innerHTML = '';
		var fo = new FlashObject(swf_src,'ss_picker', 550, 425, '8', '');
		fo.addParam("quality", "high");
		fo.addParam("wmode", "transparent");
		fo.addParam("allowScriptAccess", "always");
		fo.addVariable("permission", permission);
		fo.write('my_picker');
		$('#my_picker').show();
		return false;
	};

	var hide_picker = function(){
		$('#my_picker').hide();
		return false;
	};

	var picker_login = function() {
		AppBase.show_login();
		$('#my_picker').hide();
		return false;
	};

var on_click_create_slideshow_for_group = function(){
  AppBase.ual('create_slideshow_from_flash_on_group_profile');
  if( !AppBase.user ){
      AppBase.show_login(translate('you_must_log_in_to_contribute'));
  }else{
    bu.relocate('/arrange?for_gpuid='+Groups.profile.puid);
  }
};
var on_click_add_photos_to_group = on_click_create_slideshow_for_group;
