//gigya.services.socialize.verbose = true;

(function($) {
	$.fn.share_appearance = function(api_key, message) {
			
		return this.each(function() {
			
			var provider = $(this).attr('rel');
			
			var api = {
				APIKey:api_key,
				enabledProviders:provider
			};
			
			var context = { api:api, message:message, provider:provider, selector:this }
			
			alert_if_debugging('getUserInfo', api);
			gigya.services.socialize.getUserInfo(api, { context:context, callback:get_user_info_callback });
	
		});
	};
	
	function alert_if_debugging(method, api, message)
	{
		if(document.location.search.indexOf("gigya_debug=true") > 0)
		{
			if(message) alert('calling: ' + method + '\nenabledProviders: ' + api.enabledProviders + '\nmessage: ' + message)
			if(!message) alert('calling: ' + method + '\nenabledProviders: ' + api.enabledProviders)
		}
	}
	
	function set_box_text(heading, message)
	{
		$('div.share_appearance h2').text(heading);
		$('div.share_appearance p').text(message);
	}
	
	function invalid_response(response)
	{
		/* DEBUG *** for some reason these callbacks get called twice sometimes

		msg = 'status: ' + response.status;
		msg = msg + '\nstatusMessage: ' + response.statusMessage;
		msg = msg + '\noperation: ' + response.operation;
		msg = msg + '\ncontext: ' + response.context;
		if(response.user)
		{
			msg = msg + '\nuserName: ' + response.user.firstName;
			msg = msg + '\nUID: ' + response.user.UID;
		}
		alert(msg)
		
		*/
		
		if(response.status != 'OK')
		{
			set_box_text('Sorry, there was an error', response.statusMessage)
			return true;
		}
		
		return false;
	}
	
	function get_user_info_callback(response)
	{
		if(invalid_response(response)) return;
		
		$(response.context.selector).click(function(e) {
			
			/* DEBUG *** the click only occurs once
			
			alert('icon clicked')
			alert(api.enabledProviders)
			//gigya.services.socialize.disconnect(api);
			*/
			
			set_box_text('Please wait...', 'Posting your message.')
			if(response.user.identities[response.context.provider])
			{
				alert_if_debugging('setStatus', response.context.api, response.context.message);
				gigya.services.socialize.setStatus(response.context.api, {status:response.context.message, callback: set_status_callback });
			}
			else
			{
				var context = { api:response.context.api, message:response.context.message }

				alert_if_debugging('connect', response.context.api);
				gigya.services.socialize.connect(response.context.api, { provider: response.context.provider, callback: connect_callback, context: context })
			}
			
		});
	}
	
	function connect_callback(response)
	{
		if(invalid_response(response)) return;
		
		alert_if_debugging('setStatus', response.context.api, response.context.message);
		gigya.services.socialize.setStatus(response.context.api, {status:response.context.message, callback: set_status_callback });
	}
	
	function set_status_callback(response)
	{
		if(invalid_response(response)) return;
		set_box_text('The event has been posted', 'Click on another network below to post again or close the window')
	}

})(jQuery);