// 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($) {
/**
 * @author Alexander Farkas
 * v. 1.21
 */


//(function($) {
	if(!document.defaultView || !document.defaultView.getComputedStyle){ // IE6-IE8
		var oldCurCSS = jQuery.curCSS;
		jQuery.curCSS = function(elem, name, force){
			if(name === 'background-position'){
				name = 'backgroundPosition';
			}
			if(name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[ name ]){
				return oldCurCSS.apply(this, arguments);
			}
			var style = elem.style;
			if ( !force && style && style[ name ] ){
				return style[ name ];
			}
			return oldCurCSS(elem, 'backgroundPositionX', force) +' '+ oldCurCSS(elem, 'backgroundPositionY', force);
		};
	}
	
	var oldAnim = $.fn.animate;
	$.fn.animate = function(prop){
		if('background-position' in prop){
			prop.backgroundPosition = prop['background-position'];
			delete prop['background-position'];
		}
		if('backgroundPosition' in prop){
			prop.backgroundPosition = '('+ prop.backgroundPosition;
		}
		return oldAnim.apply(this, arguments);
	};
	
	function toArray(strg){
		strg = strg.replace(/left|top/g,'0px');
		strg = strg.replace(/right|bottom/g,'100%');
		strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
		var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
		return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
	}
	
	$.fx.step. backgroundPosition = function(fx) {
		if (!fx.bgPosReady) {
			var start = $.curCSS(fx.elem,'backgroundPosition');
			
			if(!start){//FF2 no inline-style fallback
				start = '0px 0px';
			}
			
			start = toArray(start);
			
			fx.start = [start[0],start[2]];
			
			var end = toArray(fx.options.curAnim.backgroundPosition);
			fx.end = [end[0],end[2]];
			
			fx.unit = [end[1],end[3]];
			fx.bgPosReady = true;
		}
		//return;
		var nowPosX = [];
		nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
		nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];           
		fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];

	};
//})(jQuery);

$(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 {
		if (convers8.url.substring(0, 7) != 'http://'
				&& convers8.url.substring(0, 8) != 'https://') {
			// TODO: once we support https, determine the request scheme automatically
			convers8.url = 'http://' + convers8.url;
		}
		if (convers8.url.substring(convers8.url.length-1) != '/') {
			convers8.url += '/';
		}
	}
});

$(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_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 class="convers8_melding"> <span class="convers8_melding_icon"></span><span class="convers8_melding_bericht"></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_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_login"> <div class="convers8_login_inloggen"> <h1>Inloggen met</h1> <div class="convers8_login_social_networks"> <div class="convers8_login_icon convers8_login_icon_FaceBook" name="FaceBook"></div> <div class="convers8_login_icon convers8_login_icon_Hyves" name="Hyves"></div> <div class="convers8_login_icon convers8_login_icon_LinkedIn" name="LinkedIn"></div> <div class="convers8_login_icon convers8_login_icon_Twitter" 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><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>';
}

$(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) {
		$.getJSON(
				convers8.url + 'api-1/user/users?callback=?',
				{
					website: convers8.website,
					users: convers8.users.join(',') 
				},
				function (data) {
					$.each(data.users, function(index, user) {
						$('.convers8_user[name=' + user.id + ']').html(convers8_showPerson(user));
					});
					// the requested user info has been retrieved, now event handlers may use it
					$(convers8).trigger('fetched_userinfo', data);
				}
		);
	}
	$(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 convers8_icon_small_' + 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;

$(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 == 'uit') {
			convers8_enableNetwerk(netwerk);
		} else {
			convers8_disableNetwerk(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() {
	$.getJSON(convers8.url + 'api-1/login/logout?callback=?',
			{ website: convers8.website },
			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();
	$.getJSON(
			convers8.url + 'api-1/login?callback=?',
			{ website: convers8.website },
			function(data) { convers8_updateLoginStatus(data); }
	);
}
window['convers8_fetchLoginStatus'] = convers8_fetchLoginStatus;

function convers8_updateLoginStatus(data) {
	if (typeof(data.user) != 'undefined' && data.user != null) {
		$('.convers8_login_inloggen').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();
			$('.convers8_login_icon_' + 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_icon').hide();
		// show the buttons for allowed social networks again
		$.each(data.allowedNetworks, function(index, network) {
			$('.convers8_login_icon_' + network).show();
		});
		$('.convers8_login_inloggen').show();
	}
	
	if (typeof(data.user) != 'undefined' && data.user != null) {
		convers8.loggedInUser = data.user;
		$(convers8).trigger('login_update', [data.user]);
		$(convers8).trigger('login_credentials', [data]);
	} else {
		convers8.loggedInUser = null;
		$(convers8).trigger('login_update', [null]);
		$(convers8).trigger('login_credentials', [null]);
	}
}
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) {
	$.getJSON(convers8.url + 'api-1/login/disable-network/' + naam + '?callback=?',
			{ website: convers8.website },
			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;
		$.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) {
		$.getJSON(convers8.url + 'api-1/login/enable-network/' + naam + '?callback=?',
				{ website: convers8.website },
				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 = window.location.href.replace(window.location.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_melding').slideUp('normal',function(){
			$('.convers8_melding_bericht').empty().append('Bezig met delen op ' + window.location.host + '');
			$('.convers8_melding').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) {
		if (typeof(data.shares) != 'undefined') {
			if(typeof($(".convers8_share_switch[name='aan']").attr('name')) == 'undefined') {
				// success
				$('.convers8_melding_bericht').empty().append('Dit item is succesvol gedeeld op ' + $(location).attr('host') + '!');
				$('.convers8_melding').addClass('convers8_success').slideDown();
			} else {
				$('.convers8_melding_bericht').empty().append('Dit item is succesvol gedeeld!');
				$('.convers8_melding').addClass('convers8_success').slideDown();
			}
		} else if (typeof(data.error_message) != 'undefined') {
			// error
			$('.convers8_melding').slideUp('normal',function(){
				$('.convers8_melding_bericht').empty().append('error: ' + data.error_message);
				$('.convers8_melding').addClass('convers8_error').slideDown();
			});
			
		} else {
			// epic fail
			$('.convers8_melding_bericht').empty().append('fail');
			$('.convers8_melding').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).attr('href').replace($(location).attr('hash'), '');
		}
		if (titel == null) {
			titel = $('title').html();
		}
		
		$('#convers8_share_titel').html(titel).attr('href', url).attr('name', (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;

function convers8_verstuurdeelbox() {
	var deelUrl = $('#convers8_share_titel').attr('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"]').attr('checked');
	var iedereen_delen = $('.convers8_share_settings').find('input[name="iedereen_delen"]').attr('checked');

	// include the signature if it is set
	var signature = $('#convers8_share_titel').attr('name');
	convers8_shareUrl(deelUrl, iedereen_delen, netwerken, bericht, url_delen, signature);
}
window['convers8_verstuurdeelbox'] = convers8_verstuurdeelbox;

function convers8_shareUrl(url, isPublic, networks, message, publishUrl, signature) {
	var signatureParams = {};
	if (signature != null && signature != '') {
		signatureParams.website = convers8.website;
		signatureParams.signature = signature;
	}
	var shareNetworks = {};
	$.each(networks, function(index, network) {
		shareNetworks['share_' + network] = 'true';
	});
	
	$.ajax({
			url: convers8.url + 'api-1/share/share',
			data: jQuery.extend(shareNetworks, signatureParams, {
				"website": convers8.website,
				"uri": url,
				"public": isPublic,
				"message": message,
				"publish_uri": publishUrl
			}),
			dataType: 'jsonp',
			success: 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);
	}
	
	$.ajax({
			url: convers8.url + 'api-1/share/shared',
			data: {
				website: convers8.website,
				uri: url
			},
			dataType: 'jsonp',
			success: 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 (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>");
			var teller = teller + 1;
		}
	}
}

function convers8_gedeeldBoxDelers(url) {
	var deel_types = ['friends', 'others'];
	var delers = convers8_shared(url);
	if (typeof(delers) != 'undefined') {
		if ($(location).attr('href').replace($(location).attr('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');
}

$(document).ready(function () {
	$('.convers8_share_photos').click(function () {
		convers8_showPhotoShareBox();
	});
	
	if ($('.convers8_photos_shared').length) {
		convers8_loadSharedPhotos();
	}
	
	$(convers8).bind('update_photos', function(event, photos) {
		convers8_updatePhotos(photos);
	});
	
	$(convers8).bind('updateUserAlbums', function(event, albums) {
		$('#convers8_share_photos_album_list').html('');
		if (typeof(albums) != 'undefined') {
			for (album in albums) {
				album = albums[album];
				$('<li><div class="convers8_photo_box"><img src="" alt="' + album.naam + '" title="' + album.naam + '" /></div>' +
						"<a href=\"javascript:void(0);\" class=\"album_title\" onclick=\"convers8_showPhotosInAlbum('" + album.netwerk + "', '" + album.id + "');\">" +
						album.naam + '</a><div class="convers8_social_network convers8_' + 
						album.netwerk + '"></div> ' + album.aantal + ' foto&#039;s</li>').appendTo('#convers8_share_photos_album_list');
			}
		}
	});

	$(convers8).bind('updateAlbumPhotos', function(event, photos) {
		if(typeof(photos) != 'undefined') {
			$('#convers8_share_photos_photo_list_header').show();
			$('#convers8_share_photos_photo_list').html('<form action="javascript:void(0);">');
			for (photo in photos) {
				photo = photos[photo];
				$('<li><div class="convers8_photo_box"><img src="' + photo.icon + '" alt="' + photo.naam + '" title="' + photo.naam + '" /></div>' +
						'<label><input type="checkbox" class="convers8_share_photo_checkbox" name="' + photo.id +'" value="share" checked="checked" /> Delen</label>' +
						'</li>').appendTo('#convers8_share_photos_photo_list');
			}
			$('</form>').appendTo('#convers8_share_photos_photo_list');
			$('#convers8_photos_submit').attr('name', id);
			$('#convers8_photos_submit').attr('title', network);
			
			$('#convers8_share_photos_photo_list_footer').show();
		}
	});
});

function convers8_loadSharedPhotos() {
	$.getJSON(convers8.url + 'api/photos/photos?website=' + convers8.website + '&callback=?', function(data) {
		if (typeof(data.photos) != 'undefined') {
			$(convers8).trigger('update_photos', data.photos);
		}
	});
}

var convers8_photos;
function convers8_updatePhotos(photos) {
	alert(photos);
	convers8_photos = photos;
	$('.convers8_photos_shared').html('');
	for (photoId in photos) {
		photo = photos[photoId];
		$('<li><div name="' + photo.id + '" class="convers8_photo_box"><img src="' + photo.icon + '" alt="" /></div></li>').appendTo('.convers8_photos_shared');
		$('.convers8_photo_box[name="' + photo.id + '"]').attr('id', photoId).click(function() {
			photo = convers8_photos[$(this).attr('id')];
			$('#convers8_photo').html('<img src="' + photo.image + '" alt="" />');
			$.getJSON(
					convers8.url + 'api/gebruiker/?callback=?',
					{
						'website': convers8.website,
						'gebruiker': photo.gebruiker
					},
					function (data) {
						if (data.gebruiker != undefined) {
							$('#convers8_photo_owner').html(convers8_showPerson(data.gebruiker));
						}
					}
			);
			
			$('#convers8_overlay').fadeIn();
			$('#convers8_photo_popover').fadeIn();
		});
	}
}

function convers8_fetchUserAlbums() {
	$.getJSON(convers8.url + 'api/photos/?callback=?&website=' + convers8.website, function(data) {
		$(convers8).trigger('updateUserAlbums', data.albums);
	});
}

function convers8_fetchAlbumPhotos(albumNetwork, albumId) {
	$.getJSON(convers8.url + 'api/photos/album?network=' + network + '&album=' + id + '&website=' + convers8.website + 'callback=?', function(data) {
		$(convers8).trigger('updateAlbumPhotos', data.photos);
	});
}

function convers8_showPhotoShareBox() {
	$('#convers8_share_photos_photo_list_header').hide();
	$('#convers8_share_photos_photo_list').html('');
	$('#convers8_share_photos_photo_list_footer').hide();
	
	convers8_getUserAlbums();
	
	$('#convers8_overlay').fadeIn();
	$('#convers8_share_photos_popover').fadeIn();
}

function convers8_showPhotosInAlbum(network, id) {
	$('#convers8_share_photos_photo_list_header').hide();
	$('#convers8_share_photos_photo_list').html('');
	$('#convers8_share_photos_photo_list_footer').hide();
	
}

function convers8_share_photos() {
	$('.convers8_melding').slideUp('normal',function(){
		$(this).removeClass('convers8_success convers8_info convers8_warning convers8_error');
		$('.convers8_melding_bericht').empty().append('Bezig met delen op ' + $(location).attr('host'));
		$('.convers8_melding').addClass('convers8_info').slideDown();
	});	
	
	network = $('#convers8_photos_submit').attr('title');
	album = $('#convers8_photos_submit').attr('name');
	
	photos = new Array();
	$('.convers8_share_photo_checkbox:checked').each(function () {
		photos.push($(this).attr('name'));
	});
	photos = photos.join(',');
	
	$.getJSON(convers8.url + 'api/photos/share?network=' + network + '&album=' + album +
				'&photos=' + photos + '&callback=?&website=' + convers8.website,
			function(data) {
				if (data.photos != undefined) {
					// success
					$('.convers8_melding_bericht').empty().append('De foto(s) zijn succesvol gedeeld op ' + $(location).attr('host') + '!');
					$('.convers8_melding').removeClass('convers8_success convers8_info convers8_warning convers8_error').addClass('convers8_success').slideDown();
					convers8_updatePhotos(data.photos);
				} else if (data.error_message != undefined) {
					// error
					$('.convers8_melding').slideUp('normal',function(){
						$('.convers8_melding_bericht').empty().append('error: ' + data.error_message);
						$('.convers8_melding').removeClass('convers8_success convers8_info convers8_warning convers8_error').addClass('convers8_error').slideDown();
					});
				} else {
					// epic fail
					$('.convers8_melding_bericht').empty().append('fail');
					$('.convers8_melding').removeClass('convers8_success convers8_info convers8_warning convers8_error').addClass('convers8_warning').slideDown();
				}
			}
	);
}

})(jQuery);

