// Define the $ function to be jQuery only in the context of the Convers8 library.
// If jQuery is in noConflict mode, we must access it using the jQuery identifier outside this.
(function($) {
$(document).ready(function() {
	if (typeof(window.convers8) === 'undefined') {
		// set convers8 to a nonexistent URL to prevent it from doing any harm
		convers8 = {
			url: 'http://null.convers8.eu/',
			website: '0'
		};
		throw new Error('Convers8 not configured');
	} else {
		// prepend the protocol if not provided by the user
		if (convers8.url.substring(0, 7) != 'http://'
				&& convers8.url.substring(0, 8) != 'https://') {
			// use the same scheme as the page the user is on
			scheme = window.location.protocol;
			
			convers8.url = (scheme == 'https:' ? 'https' : 'http') + '://' + convers8.url;
		}
		if (convers8.url.substring(convers8.url.length-1) != '/') {
			convers8.url += '/';
		}
	}
});

/**
 * Encapsulates $.getJSON() with some Convers8-specific handling
 */
function convers8_getJSON(url, requestData, callback) {
	if (typeof(requestData) == 'function' && typeof(callback) == 'undefined') {
		// requestData parameter was omitted, second parameter is success callback
		callback = requestData;
		requestData = {};
	}
	
	if (url.match("^"+convers8.url) != convers8.url) {
		// if a relative URL is given, start with the convers8 URL
		url = convers8.url + url;
	}
	
	if (typeof(convers8.secure_mode) != 'undefined' && convers8.secure_mode != null) {
		// add secure-mode GET parameter if defined
		requestData['secure-mode'] = convers8.secure_mode;
	}
	requestData.website = convers8.website; // override the website that may be specified elsewhere
	
	result = $.ajax({"url": url,
		"data": requestData,
		"dataType": 'jsonp',
		"success": function(responseData) {
			// TODO: check for secure mode errors here
			if (typeof(responseData.error) != 'undefined' && responseData.error != null
					&& responseData.error.error_code == 1964) {
				// this error is related to an invalid signature, try to handle it ourselves
				$(convers8).bind('secure-mode-updated', function(event) {
					$(this).unbind(event);
					
					// try to do the failed request again
					convers8_getJSON(url, requestData, callback);
				});
				$(convers8).trigger('secure-mode-error');
			}
		
			return callback(responseData);
		}
	});
	return;
}
$(document).ready(function() {
	$("<div id='convers8_overlay'></div><div id='convers8_popup_container'></div>").appendTo('body');
	$('#convers8_popup_container').html(convers8_templates());
});

function convers8_templates() {
	return '<div id="convers8_share_photos_popover" class="convers8_popover"> <div class="convers8_title"> Deel foto&#039;s van je netwerken <a href="javascript:void(0);" class="convers8_close"></a> </div> <div id="convers8_share_photos" class="convers8_popover_body"> <div class="convers8_melding"> <span class="convers8_melding_icon"></span><span class="convers8_melding_bericht"></span><span class="convers8_melding_exit"></span> </div> <p>Selecteer een album om foto&#039;s uit te delen:</p> <ul id="convers8_share_photos_album_list"></ul> <p id="convers8_share_photos_photo_list_header"> Selecteer de foto&#039;s die je wil delen:<br /> <a href="javascript:void(0);" onclick="$(\'.convers8_share_photo_checkbox\').attr(\'checked\', \'checked\')">Alles selecteren</a> <a href="javascript:void(0);" onclick="$(\'.convers8_share_photo_checkbox\').attr(\'checked\', \'\')">Niets selecteren</a> </p> <div class="convers8_share_photos_photo_container"> <ul id="convers8_share_photos_photo_list"></ul> </div> <p id="convers8_share_photos_photo_list_footer"> <a href="javascript:void(0);" id="convers8_photos_submit" class="convers8_share_button" onclick="convers8_share_photos();"></a> </p> <br style="clear: both;" /> </div> </div> <div id="convers8_photo_popover" class="convers8_popover"> <div class="convers8_title"> <a href="javascript:void(0);" class="convers8_close"></a> </div> <div class="convers8_popover_body"> <div id="convers8_photo" class="convers8_popover_content"></div> <div class="convers8_popover_sidebar"> <div class="convers8_popover_sidebar_block"> <div class="convers8_popover_sidebar_title"> <span>Geplaatst door</span> </div> <div id="convers8_photo_owner"></div> <br style="clear: both;" /> </div> </div> <br style="clear: both;" /> </div> </div><div id="convers8_gedeeld"> <h1>Gedeeld</h1> <div class="convers8_gedeeld_tekst"> Mensen die deze pagina gedeeld hebben. </div> <h3>Vrienden</h3> <div class="convers8_gedeeld_friends convers8_mensen"></div> <br style="clear: both;" /> <h3>Anderen</h3> <div class="convers8_gedeeld_others convers8_mensen"></div> <br style="clear: both;" /> </div><div id="convers8_share_box"> <div class="convers8_share_titel"> Deel: <span id="convers8_share_titel"></span> <a href="javascript:void(0);" class="convers8_close"></a> </div> <div id="convers8_share"> <div class="convers8_share_content"> <div id="convers8_share_status" class="convers8_melding"> <span class="convers8_melding_icon"></span><span id="convers8_share_status_msg"></span><span class="convers8_melding_exit"></span> </div> Plaats deze update op je netwerk:<br /> <form id="convers8_share_form"> <textarea id="convers8_share_tekst"></textarea> <span class="convers8_share_settings"> <a href="javascript:void(0);" id="convers8_share_submit" class="convers8_share_submit"></a> <label for="url_delen">Link naar dit item meesturen</label> <input type="checkbox" id="url_delen" name="url_delen" value="url_delen" checked="checked" /><br /> <label for="iedereen_delen">Publiek delen</label> <input type="checkbox" id="iedereen_delen" name="iedereen_delen" value="iedereen_delen" checked="checked" /> </span> </form> <div class="convers8_share_delers"> Deze mensen deelden ook deze update:<br /> <div id="convers8_share_delers" class="convers8_mensen"></div> </div> </div> <div class="convers8_share_sidebar"> <div class="convers8_share_blok" name="delen_op"> <div class="convers8_share_sidebar_titel"> <span>Delen op</span> </div> <div class="convers8_share_button convers8_share_FaceBook"> <span class="convers8_share_logo convers8_share_logo_FaceBook" name="FaceBook"></span> <span class="convers8_share_switch" name="uit"></span> </div> <div class="convers8_share_button convers8_share_Hyves"> <span class="convers8_share_logo convers8_share_logo_Hyves" name="Hyves"></span> <span class="convers8_share_switch" name="uit"></span> </div> <div class="convers8_share_button convers8_share_LinkedIn"> <span class="convers8_share_logo convers8_share_logo_LinkedIn" name="LinkedIn"></span> <span class="convers8_share_switch" name="uit"></span> </div> <div class="convers8_share_button convers8_share_Twitter"> <span class="convers8_share_logo convers8_share_logo_Twitter" name="Twitter"></span> <span class="convers8_share_switch" name="uit"></span> </div> </div> </div> <br style="clear:both" /> </div> </div>	<div id="convers8_login"> <div class="convers8_login_inloggen"> <h1>Inloggen met</h1> <div class="convers8_login_social_networks"> <div class="convers8_network_icon convers8_login_icon" name="FaceBook"></div> <div class="convers8_network_icon convers8_login_icon" name="Hyves"></div> <div class="convers8_network_icon convers8_login_icon" name="LinkedIn"></div> <div class="convers8_network_icon convers8_login_icon" name="Twitter"></div> </div> <div class="convers8_login_text"></div> <div class="convers8_inloggen_links"> <!--				<a href="#">Inloggen met Eventi account</a><br />--> <!--				Nog geen account? <a href="#">Aanmaken</a>--> </div>		 </div><!-- convers8_login_inloggen --> <div class="convers8_login_ingelogd"> <h1 class="convers8_login_ingelogd"><span class="convers8_login_header"></span></h1> <div> <div class="convers8_login_user social_koppelingen"></div> <div class="convers8_login_koppelingen"> <div class="convers8_login_button convers8_login_FaceBook"> <span class="convers8_login_logo convers8_login_logo_FaceBook" name="FaceBook"></span> <span class="convers8_login_switch" name="uit"></span> </div> <div class="convers8_login_button convers8_login_Hyves"> <span class="convers8_login_logo convers8_login_logo_Hyves" name="Hyves"></span> <span class="convers8_login_switch" name="uit"></span> </div> <div class="convers8_login_button convers8_login_LinkedIn"> <span class="convers8_login_logo convers8_login_logo_LinkedIn" name="LinkedIn"></span> <span class="convers8_login_switch" name="uit"></span> </div> <div class="convers8_login_button convers8_login_Twitter"> <span class="convers8_login_logo convers8_login_logo_Twitter" name="Twitter"></span> <span class="convers8_login_switch" name="uit"></span> </div> <div class="convers8_login_links" style="clear:both;"> <a href="javascript:void(0);" onclick="convers8_logout(); return false;" id="convers8_login_logout">Uitloggen</a> </div> </div> <br style="clear: both;" /> </div> </div><!-- convers8_login_ingelogd --> <div class="convers8_login_error convers8_error convers8_melding"></div> </div>';
}

$(document).ready(function() {
	
	convers8.users = [];
	$('.convers8_user').each(function() {
		id = $(this).attr('name');
		if (typeof(id) != 'undefined') {
			convers8.users.push(id);
		}
	});
	// Event handlers may append extra users to request data for to the users array
	$(convers8).trigger('request_userinfo');
	if (convers8.users.length) {
		$(convers8).bind('fetched_userinfo', function(event, data) {
			$.each(data.users, function(index, user) {
				$('.convers8_user[name=' + user.id + ']').html(convers8_showPerson(user));
			});
		});
		convers8_fetchUsers(convers8.users);
	}
	$(convers8).bind('login_update', function(event, user) {
		if (typeof(user) == 'undefined' || user == null) {
			$('.convers8_user').not('[name]').empty();
		} else {
			$('.convers8_user').not('[name]').html(convers8_showPerson(user));
		}
	});
});

function convers8_showPerson(gebruiker) {
	
	var naam = gebruiker.firstName + ' ' + gebruiker.lastName;
	var result = '\n\
	<div class="convers8_mens">\n\
		<img src="' + gebruiker.picture + '" alt="' + naam + '" title="' + naam + '" />\n\
		<ul class="convers8_connectednetworks">\n';
	$.each(gebruiker.networks, function(index, network) {
		result += '<li><a class="convers8_network_icon_small" name="' + network.network + '" href="' + network.url + '" onclick="window.open(this.href,\'_blank\');return false;"></a></li>';
	});
	result += '		</ul>\n\
	</div>\n';
	
	return result;
}
window['convers8_showPerson'] = convers8_showPerson;

function convers8_fetchUsers(users) {
	if (!users.length) {
		return;
	}
	convers8_getJSON(
			'api-1/user/users',
			{ users: users.join(',') },
			function (data) {
				// the requested user info has been retrieved, now event handlers may use it
				$(convers8).trigger('fetched_userinfo', data);
			}
	);
}
window['convers8_fetchUsers'] = convers8_fetchUsers;

$(document).ready(function() {
	// replace login box contents if they're empty
	$('.convers8_login').each(function() {
		if ($(this).html() == '') {
			$(this).html($('#convers8_login').html());
		}
	});

	$('.convers8_login_icon').click(function() {
		network = $(this).attr('name');
		convers8_createLoginPopup(network);
	});

	$('.convers8_login_button').click(function(){
		netwerk = $(this).find('.convers8_login_logo').attr('name');
		networkStatus = $(this).find('.convers8_login_switch').attr('name');
		
		convers8_toggleKoppeling(netwerk);
		if (networkStatus == 'aan') {
			convers8_disableNetwerk(netwerk);
		} else {
			convers8_enableNetwerk(netwerk);
		}
	});
	
	$(convers8).bind('login_update', function(event, user) {
		$(this).unbind(event);
		
		$(".convers8_login_switch[name='uit']").prev('.convers8_login_logo').hide();
		$(".convers8_login_switch[name='aan']").css({backgroundPosition: '0 0'});
	});
	
	$(convers8).trigger('login_init');
	convers8_fetchLoginStatus();
});

function convers8_logout() {
	convers8_getJSON('api-1/login/logout',
			function (data) {
				// make sure we are notified when the login status is updated
				// if someone is logged in now and no one is after this fetch,
				// we want to emit a logout event
				if (convers8.loggedInUser != null) {
					$(convers8).bind('login_update', function(event, user) {
						if (typeof(user) == 'undefined' || user == null) {
							// user is logged out now, unbind ourselves to avoid future triggers,
							// then trigger the login event
							$(this).unbind(event);
							$(convers8).trigger('logout');
						}
					});
				}
				convers8_updateLoginStatus(data);
			}
	);
}
window['convers8_logout'] = convers8_logout;

function convers8_fetchLoginStatus() {
	$('.convers8_login_ingelogd').hide();
	$('.convers8_login_inloggen').hide();
	convers8_getJSON(
			'api-1/login',
			function(data) { convers8_updateLoginStatus(data); }
	);
}
window['convers8_fetchLoginStatus'] = convers8_fetchLoginStatus;

function convers8_updateLoginStatus(data) {
	if (typeof(data.error) != 'undefined' && data.error != null) {
		$('.convers8_login_ingelogd').hide();
		$('.convers8_login_inloggen').hide();
		
		$('.convers8_login_error').html('Fout bij het ophalen van loginstatus: ' + data.error.error_message).show();
	} else if (typeof(data.user) != 'undefined' && data.user != null) {
		$('.convers8_login_inloggen').hide();
		$('.convers8_login_error').hide();
		$('.convers8_login_header').html(data.user.firstName);
		$('.convers8_login_logo').each(function() { 
			convers8_toggleKoppeling($(this).attr('name'), false);
			$(this).parent().hide(); // hide all buttons to make sure no disallowed network is usable
		});
		
		// show the buttons for allowed social networks again
		$.each(data.allowedNetworks, function(index, network) {
			$('.convers8_login_' + network).show();
		});

		$.each(data.user.networks, function(index, netwerk) {
			convers8_toggleKoppeling(netwerk.network, true);
		});
		$('.convers8_login_user').html(convers8_showPerson(data.user));
		$('.convers8_login_ingelogd').fadeIn();
		convers8_animeerKoppelingen();
	} else {
		$('.convers8_login_ingelogd').hide();
		$('.convers8_login_error').hide();
		
		$('.convers8_login_icon').hide();
		// show the buttons for allowed social networks again
		$.each(data.allowedNetworks, function(index, network) {
			$('.convers8_login_icon[name="' + network + '"]').show();
		});
		$('.convers8_login_inloggen').show();
	}
	
	if (typeof(data.user) != 'undefined' && data.user != null) {
		convers8.loggedInUser = data.user;
		$(convers8).trigger('login_update', [data.user]);
	} else {
		convers8.loggedInUser = null;
		$(convers8).trigger('login_update', [null]);
	}
	// data has the allowed networks if not logged in, so broadcast it always
	$(convers8).trigger('login_credentials', [data]);
}
window['convers8_updateLoginStatus'] = convers8_updateLoginStatus;

function convers8_toggleKoppeling(naam, enabled) {
	var button = $('.convers8_login_' + naam);
	if (typeof(button) == 'undefined') {
		return;
	}
	if (enabled == null) {
		// toggle the current enabled
		if(button.find('.convers8_login_switch').attr('name') == 'aan'){
			enabled = 'uit';
		} else {
			enabled = 'aan';
		}
	} else if (enabled == true || enabled == false) {
		enabled = (enabled ? 'aan' : 'uit');
	} else if (enabled != 'aan' && enabled != 'uit') {
		return;
	}
	
	button.find('.convers8_login_switch').attr('name', enabled);
}

function convers8_animeerKoppelingen() {
	$('.convers8_login_button').each(function() {
			if ($(this).find('.convers8_login_switch').attr('name') == 'uit') {
				$(this).find('.convers8_login_switch')
					.animate({backgroundPosition: '-45px 0'}, 600);
				$(this).find('.convers8_login_logo').fadeOut(600);
			} else {
				$(this).find('.convers8_login_switch')
					.animate({backgroundPosition: '0 0'}, 600);
				$(this).find('.convers8_login_logo').fadeIn(600);
			}
	});
}

function convers8_disableNetwerk(naam) {
	convers8_getJSON('api-1/login/disable-network/' + naam,
			function(data){
				if (typeof(data.user) != 'undefined') {
					convers8_updateLoginStatus(data);
				}
			}
	);
}
window['convers8_disableNetwerk'] = convers8_disableNetwerk;

/**
 * Enables a network for the usage with the event the user is currently visiting.
 * If the user has not yet connected the network to their account and connect is true,
 * the user will be asked to grant Convers8 permission to connect to their account.
 * If connect is false or undefined, the attempt to enable the network will just fail.
 * 
 * @param naam The name of the network to enable
 * @param connect Whether the user will be asked to connect to the network if it is not yet connected.
 * @return void
 */
function convers8_enableNetwerk(naam, connect) {
	if (typeof(connect) == 'undefined') {
		connect = true;
	}
	
	var network = null;
	networks = convers8.loggedInUser.networks;
	// check whether the requested network was already enabled, re-enabling it is harmless
	$.each(networks, function(index, currentNetwork) {
		if (currentNetwork.network == naam) {
			network = currentNetwork;
			return false; // break the 'each-loop'
		}
		network = null; // not the right network, hide it beyond this loop
	});
	if (network == null) {
		// check whether the requested network was already connected, but disabled		
		disabled_networks = convers8.loggedInUser.disabled_networks;
		if (disabled_networks != null && typeof(disabled_networks) != 'undefined') {
			$.each(disabled_networks, function(index, currentNetwork) {
				if (currentNetwork == naam) {
					network = currentNetwork;
					return false; // break the 'each-loop'
				}
				network = null; // not the right network, hide it beyond this loop
			});
		}
	}
	
	// If the network is unknown and it is allowed to connect a new network, open a popup to request permission
	// In all other cases, just try to enable the network; we may have just received permission we are not aware of yet
	if (network != null || !connect) {
		convers8_getJSON('api-1/login/enable-network/' + naam,
				function(data) {
					if (typeof(data.user) != 'undefined') {
						convers8_updateLoginStatus(data);
					}
				}
		);
	} else if (connect) {
		convers8_createLoginPopup(naam, true);
	}
}
window['convers8_enableNetwerk'] = convers8_enableNetwerk;

var convers8_popup = null;
var convers8_popup_network = null;
var convers8_popupUnloadTimer = null;

function convers8_createLoginPopup(network, koppelen) {
	convers8_popup_network = network;
	var url = convers8.url + '/api-1/login/login/' + network + '?close=true&website=' + convers8.website;
	
	if (koppelen == true) {
		url += '&current-user=true';
	}
	
	convers8_popup = window.open(url, network, 'width=850,height=600');
	convers8_popupUnloadTimer = setInterval(convers8_popupUnloadHandler, 100); // TODO: see if we can do this based on events
}
window['convers8_createLoginPopup'] = convers8_createLoginPopup;

function convers8_popupUnloadHandler() {
	if (convers8_popup.closed) {
		if (convers8_popupUnloadTimer != null) {
			clearInterval(convers8_popupUnloadTimer);
			convers8_popupUnloadTimer = null;
			
			// make sure we are notified when the login status is updated
			// if no one is logged in yet and someone is after this fetch,
			// we want to emit a login event
			if (convers8.loggedInUser == null) {
				$(convers8).bind('login_update', function(event, user) {
					if (typeof(user) != 'undefined' && user != null) {
						// someone is logged in now, unbind ourselves to avoid future triggers,
						// then trigger the login event
						$(this).unbind(event);
						$(convers8).trigger('login', [user]);
					}
				});
			}
			convers8_fetchLoginStatus();
		}
	}
}

$(document).ready(function() {
	
	$('.convers8_share_button').click(function(){
		if($(this).find('.convers8_share_switch').attr('name') == 'aan'){
			$(this).find('.convers8_share_switch')
				.animate({backgroundPosition: '-45px 0px'}, 600)
				.attr('name','uit');
			$(this).find('.convers8_share_logo').fadeOut(600);
		}
		else if($(this).find('.convers8_share_switch').attr('name') == 'uit'){
			$(this).find('.convers8_share_switch')
				.animate({backgroundPosition: '0px 0px'}, 600)
				.attr('name','aan');
			$(this).find('.convers8_share_logo').fadeIn(600);
		}
	});
	
	$('.convers8_melding_exit').click(function(){
		$(this).parent().slideUp(function(){
			$(this).parent().removeClass('convers8_success convers8_info convers8_warning convers8_error').find('.convers8_melding_bericht').empty();
		});
	});
	
	$('.convers8_gedeeld').each(function(){
		$(this).html($('#convers8_gedeeld').html());
				
		url = $(this).attr('href');
		if (null == url) {
			url = $(location).prop('href').replace($(location).prop('hash'), '');
		}
		convers8_gedeeldBoxDelers(url);
		//$(this).show();
	});
	
	$('#convers8_overlay').click(function(){
		convers8_sluitdeelbox();
		$('.convers8_popover').fadeOut();
	});
	$('.convers8_close').click(function(){
		convers8_sluitdeelbox();
		$('.convers8_popover').fadeOut();
	});
	$(document).keydown(function(event) {
		if (event.which == '27') { // ESC
			convers8_sluitdeelbox();
			$('.convers8_popover').fadeOut();
		}
	});

	$('#convers8_share_submit').click(function(){
		convers8_verstuurdeelbox();
		$('#convers8_share_status').slideUp('normal',function(){
			$('#convers8_share_status_msg').html('Bezig met delen op ' + $(location).prop('host') + '');
			$('#convers8_share_status').removeClass('convers8_success convers8_error convers8_warning').addClass('convers8_info').slideDown();
		});
	});
	$(convers8).bind('login_update', function(event, gebruiker) {
		if (gebruiker == null || typeof(gebruiker) == 'undefined') {
			$('.convers8_share_blok').append("<div style='margin-left:10px;'>Je bent niet ingelogd, je kunt inloggen via de <a href='/'>homepagina</a>.</div>");
		} else {
			// enable sharing on the enabled networks for the user
			$('.convers8_share_button').hide();
			$.each(gebruiker.networks, function(index, netwerk) {
				$('.convers8_share_' + netwerk.network).show();
				$('.convers8_share_' + netwerk.network).find('.convers8_share_switch').attr('name', 'aan');
				$('.convers8_share_' + netwerk.network).find('.convers8_share_logo').show();
			});
		}
	});
	
	$(convers8).bind('share_completed', function(event, data) {
		$('#convers8_share_status').slideUp('normal',function(){
			if (typeof(data.shares) != 'undefined') {
				if(typeof($(".convers8_share_switch[name='aan']").attr('name')) == 'undefined') {
					// success
					$('#convers8_share_status_msg').html('Dit item is succesvol gedeeld op ' + $(location).prop('host') + '!');
					$('#convers8_share_status').removeClass('convers8_info convers8_error convers8_warning').addClass('convers8_success').slideDown();
				} else {
					$('#convers8_share_status_msg').html('Dit item is succesvol gedeeld!');
					$('#convers8_share_status').removeClass('convers8_info convers8_error convers8_warning').addClass('convers8_success').slideDown();
				}
			} else if (typeof(data.error) != 'undefined') {
				// error
				$('#convers8_share_status_msg').html('error: ' + data.error.error_message);
				$('#convers8_share_status').removeClass('convers8_success convers8_info convers8_warning').addClass('convers8_error').slideDown();
				
			} else {
				// epic fail
				$('#convers8_share_status_msg').html('fail');
				$('#convers8_share_status').removeClass('convers8_success convers8_error convers8_info').addClass('convers8_warning').slideDown();
			}
		});
	});
	
	$(".convers8_share_switch[name='uit']").prev('.convers8_share_logo').hide();
});

function convers8_opendeelbox(url, titel, signature) {
		if (url == null) {
			url = $(location).prop('href').replace($(location).prop('hash'), '');
		}
		if (titel == null) {
			titel = $('title').html();
		}
		
		$('#convers8_share_titel').html(titel).prop('href', url).prop('signature', (signature != undefined ? signature : ''));
		convers8_deelboxDelers(url);
		
		$('#convers8_overlay').fadeIn();
		$('#convers8_share_box').fadeIn();
}
window['convers8_opendeelbox'] = convers8_opendeelbox;

function convers8_sluitdeelbox() {
	$('#convers8_overlay').fadeOut(function(){
		$(this).hide();
		$('.convers8_melding').removeClass('convers8_success convers8_info convers8_warning convers8_error').hide();
	});
	$('#convers8_share_box').fadeOut(function(){
		//$(this).remove();
	});
}
//window['convers8_sluitdeelbox'] = convers8_sluitdeelbox; // These are only called from inside this file

function convers8_verstuurdeelbox() {
	var deelUrl = $('#convers8_share_titel').prop('href');
	var netwerken = [];
	$('.convers8_share_button').each(function(){
		if ($(this).find('.convers8_share_switch').attr('name') == 'aan') {
			netwerken.push($(this).find('.convers8_share_logo').attr('name'));
		}
	});
	var bericht = $('#convers8_share_tekst').val();
	var url_delen = $('.convers8_share_settings').find('input[name="url_delen"]').prop('checked');
	var iedereen_delen = $('.convers8_share_settings').find('input[name="iedereen_delen"]').prop('checked');

	// include the signature if it is set
	var signature = $('#convers8_share_titel').prop('signature');
	convers8_shareUrl(deelUrl, iedereen_delen, netwerken, bericht, url_delen, signature);
}
//window['convers8_verstuurdeelbox'] = convers8_verstuurdeelbox; // These are only called from inside this file

function convers8_shareUrl(url, isPublic, networks, message, publishUrl, signature) {
	var signatureParams = {};
	if (signature != null && signature != '') {
		signatureParams.signature = signature;
	}
	var shareNetworks = {};
	$.each(networks, function(index, network) {
		shareNetworks['share_' + network] = 'true';
	});
	
	convers8_getJSON('api-1/share/share',
			jQuery.extend(shareNetworks, signatureParams, {
				"uri": url,
				"public": isPublic,
				"message": message,
				"publish_uri": publishUrl
			}),
			function(data) {
				$(convers8).trigger('share_completed', data);
			}
	);
}
window['convers8_shareUrl'] = convers8_shareUrl;

// store already retrieved URLs to avoid doing duplicate work
var convers8_shared_cache = {};
function convers8_shared(url) {
	var name = convers8_urlToVar(url);
	if (typeof(convers8_shared_cache[name]) != 'undefined' && typeof(convers8_shared_cache[name].friends) != 'undefined') {
		return convers8_shared_cache[name];
	} else {
		if (typeof(convers8_shared_cache[name]) == 'undefined') {
			convers8_shared_cache[name] = {};
			convers8_shared_cache[name].callbacks = [];
		}
		
		// register a callback for when the cache is filled
		convers8_shared_cache[name].callbacks.push(arguments.callee.caller);
	}
	
	convers8_getJSON('api-1/share/shared',
			{ uri: url },
			function(data){				
				var name = convers8_urlToVar(data.uri);
				var cache = convers8_shared_cache[name];
				var vrienden = [];
				var anderen = [];
				$.each(data.shares, function(index, activiteit) {
					var gebruiker = data.users[activiteit.user];
					if (gebruiker == undefined) { return true; }// continue the 'each-loop'
					if (gebruiker.friend) {
						vrienden.push(gebruiker);
					} else {
						anderen.push(gebruiker);
					}
				});
				cache.friends = vrienden;
				cache.others = anderen;
				
				$.each(cache.callbacks, function(index, callback) {
					callback(data.uri);
				});
				delete cache.callbacks;
			}
	);
}
window['convers8_shared'] = convers8_shared;

function convers8_deelboxDelers(url) {
	$('#convers8_share_delers').html('<div class="convers8_loading"></div>');
	var delers = convers8_shared(url);
	if (typeof(delers) != 'undefined') {
		delers = [].concat(delers.friends, delers.others);
		var html = '';
		var i = 0;
		$.each(delers, function(index, deler) {
			html += convers8_showPerson(deler);
			if (++i >= 5) { return false; } // break the 'each-loop'
		});
		if (i > 0) {
			$('#convers8_share_delers').html(html);
		} else {
			$('#convers8_share_delers').html("<div style='margin:10px 0 10px 0px;'>Nog niemand heeft dit item gedeeld. Ben jij de eerste?</div>");
		}
	}
}

function convers8_gedeeldBoxDelers(url) {
	var deel_types = ['friends', 'others'];
	var delers = convers8_shared(url);
	if (typeof(delers) != 'undefined') {
		if ($(location).prop('href').replace($(location).prop('hash'), '') == url) {
			gedeeld = $('.convers8_gedeeld:not([href])');
		} else {
			gedeeld = $('.convers8_gedeeld[href="' + url + '"]');
		}

		if (gedeeld.length) {
			show = false;
			$.each(deel_types, function(index, type) {
				var html = '';
				var i = 0;
				$.each(delers[type], function(index_2, deler) {
					html += convers8_showPerson(deler);
					if (++i >= 3) { return false; } // break the 'each-loop'
				});
				gedeeld.find('.convers8_gedeeld_' + type).html(html);
				if (i > 0) {
					gedeeld.find('.convers8_gedeeld_' + type).show();
					show = true;
				}
			});
			if (show) {
				gedeeld.fadeIn();
			}
		}
	}
}

// encodes a URL so it can be used as an identifier
// uses a variation on base64 encoding to replace all invalid characters
function convers8_urlToVar (url) {
	if (url == null) {
		return null;
	}
	var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;-=";

	
	var output = "url_";
	var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
	var i = 0;

	while (i < url.length) {

		chr1 = url.charCodeAt(i++);
		chr2 = url.charCodeAt(i++);
		chr3 = url.charCodeAt(i++);

		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;

		if (isNaN(chr2)) {
			enc3 = enc4 = 64;
		} else if (isNaN(chr3)) {
			enc4 = 64;
		}

		output = output +
		_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
		_keyStr.charAt(enc3) + _keyStr.charAt(enc4);

	}

	// replace all non-alphanumeric characters by a code containing an underscore and a number
	return output.replace(/;/g, '_1').replace(/-/g, '_2').replace(/=/g, '_3');
}

})(jQuery);

