(function($) {
	$.fn.userpopup = function(oOptions) {
		var settings = $.extend({}, $.fn.userpopup.defaults, oOptions);
		$.fn.userpopup.settings = settings;
		
		var userinfopopup = document.createElement('div');
		document.body.appendChild(userinfopopup);
		$(userinfopopup).attr('id',			'userinfopopup');
		$(userinfopopup).css('display',		'none');
		$(userinfopopup).css('position',	'absolute');
		$(userinfopopup).css('z-index',		9999);
		
		$.fn.userpopup.userinfopopup = $(userinfopopup);
		
		details = ['gezondheid','power','ervaringspunten','rang','bescherming','veilig','stad'];
		ttcontent = '<div id="userinfopopup_inner"><div id="userinfopopup_header"><img id="userinfopopup_usericon"/><div id="userinfopopup_username"></div><div id="userinfopopup_familiestatus"></div></div><table id="userinfopopup_details">';
		for (d in details) {
			if (details[d] == 'stad') {
				ttcontent += '<tr class="licht" id="userinfopopup_det_'+details[d]+'"><td class="icon"><img id="userinfopopup_stad"/></td><td class="value">&nbsp;</td></tr>';
			} else {
				ttcontent += '<tr class="licht" id="userinfopopup_det_'+details[d]+'"><td class="icon"><img src="http://www.maffiabaas.nl/images/icoons/'+details[d]+'.png"/></td><td class="value">&nbsp;</td></tr>';
			}
		}
		ttcontent += '</table><div id="userinfopopup_updated"></div></div>'
		
		$(userinfopopup).html(ttcontent);
		
		$.fn.userpopup.preloadMemberIds = [];
		
		$(this).each(function(i,elmTarget) {
			iMemberId = parseInt($(elmTarget).attr('memberid'));
			if (iMemberId > 0) {
				$.fn.userpopup.preloadMemberIds.push(iMemberId);
				$(elmTarget)
					.bind('mouseenter',function(oEvent){
						$(this).stop();
						iMemberId = parseInt($(this).attr('memberid'));
						loadUserPopupUser(iMemberId);
						scrll = getScroll();
						positionUserPopup(oEvent.clientX + scrll.left, oEvent.clientY + scrll.top);
					})
					.bind('mousemove',function(oEvent){
						scrll = getScroll();
						positionUserPopup(oEvent.clientX + scrll.left, oEvent.clientY + scrll.top);
					})
					.bind('mouseleave',function(oEvent){
						$.fn.userpopup.activeMemberId = 0;
						$($.fn.userpopup.userinfopopup).stop(true,true);
						hideUserPopup();
					})
				;
			}
		});
		//MBAjax.post('userpopup', {memberid:$.fn.userpopup.preloadMemberIds}, parseUserPopupAjaxResponse);
	}
	
	function getClientSize() {
		var size = {
			width	:	0,
			height	:	0
		};
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			size.width = window.innerWidth;
			size.height = window.innerHeight;
		} else if( document.documentElement &&
		  ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			size.width = document.documentElement.clientWidth;
			size.height = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			size.width = document.body.clientWidth;
			size.height = document.body.clientHeight;
		};
		return size;
	}
	
	function getScroll() {
		var scrll = {
			top		:	0,
			left	:	0
		};
		
		if (document.body && document.body.scrollTop) {
					scrll.top = document.body.scrollTop;
		} else if (document.documentElement && !document.documentElement.scrollTop) {
			scrll.top = 0;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			scrll.top = document.documentElement.scrollTop;
		} else if (document.body && document.body.scrollTop) {
			scrll.top = document.body.scrollTop;
		}
		
		return scrll;
	}
	
	function positionUserPopup(x,y) {
		x = x + $.fn.userpopup.settings.offsetX;
		y = y + $.fn.userpopup.settings.offsetY;
		
		var scrll	= getScroll();
		var wndw	= getClientSize();
		
		if ((y + $($.fn.userpopup.userinfopopup).height()) > (scrll.top + wndw.height - $.fn.userpopup.settings.offsetY)) {
			y = scrll.top + wndw.height - $($.fn.userpopup.userinfopopup).height() - $.fn.userpopup.settings.offsetY;
		}
		
		$($.fn.userpopup.userinfopopup).css('left',		x);
		$($.fn.userpopup.userinfopopup).css('top',		y);
	}
	
	function hideUserPopup() {
		$($.fn.userpopup.userinfopopup).fadeOut(100);
	}
	
	function showUserPopup() {
		$($.fn.userpopup.userinfopopup).fadeIn(200);
	}
	
	function loadUserPopupUser(iMemberId) {
		$.fn.userpopup.activeMemberId = iMemberId;
		fillUserPopupUserInfo(iMemberId);
		bUpdateUser = false;
		if ($.fn.userpopup.userinfo[iMemberId]) {
			dNow = new Date;
			
			iNow = dNow.getTime();
			iUpd = $.fn.userpopup.userinfo[iMemberId].updated.getTime();
			iNxt = iUpd + $.fn.userpopup.settings.cacheTime;
			
			if (iNow > iNxt) {
				bUpdateUser = true;
			}
		} else {
			bUpdateUser = true;
		}
		if (bUpdateUser) {
			MBAjax.post('userpopup', {memberid:iMemberId}, parseUserPopupAjaxResponse);
			$('#userinfopopup_updated').html('<img src="../images/icoons/popup-ajax-load.gif"/>');
		}
	}
	
	function parseUserPopupAjaxResponse(oResponse) {
		$.each(oResponse.users, function(i,userInfo){
			saveUserPopupUserInfo(userInfo);
			if (userInfo.id == $.fn.userpopup.activeMemberId) {
				fillUserPopupUserInfo(userInfo.id);
			}
		});
	}
	
	function fillUserPopupUserInfo(iMemberId) {
		if ($.fn.userpopup.userinfo[iMemberId]) {
			u = $.fn.userpopup.userinfo[iMemberId];
			$('#userinfopopup_username').html(u.username);
			if (u.familie != '' && u.familie != 'Geen') {
				$('#userinfopopup_familiestatus').html(u.familieStatus+' van '+u.familie);
			} else {
				$('#userinfopopup_familiestatus').html('');
			}
			$('#userinfopopup_usericon').attr('src',u.usericon);
			$('#userinfopopup_updated').html(getUserPopupTime(u.updated));
			$('#userinfopopup_det_power .value').html(u.power);
			$('#userinfopopup_det_gezondheid .value').html(u.gezondheid);
			$('#userinfopopup_det_ervaringspunten .value').html(u.ervaringspunten);
			$('#userinfopopup_det_rang .value').html(u.rang+', '+u.rangvordering+'%');
			$('#userinfopopup_det_bescherming .value').html(u.bescherming+' uur');
			$('#userinfopopup_det_veilig .value').html(u.veilig+' uur');
			$('#userinfopopup_stad').attr('src','../images/steden/'+u.city_id+'.png');
			$('#userinfopopup_det_stad .value').html(u.city);
			showUserPopup();
		}
	}
	
	function getUserPopupTime(dDate) {
		sHours		= dDate.getHours();
		sHours		= sHours < 10 ? '0'+sHours : sHours;
		sMinutes	= dDate.getMinutes();
		sMinutes 	= sMinutes < 10 ? '0'+sMinutes : sMinutes;
		sSeconds	= dDate.getSeconds();
		sSeconds 	= sSeconds < 10 ? '0'+sSeconds : sSeconds;
		return sHours+':'+sMinutes+':'+sSeconds;
	}
	
	function saveUserPopupUserInfo(oInfo) {
		oInfo.updated = new Date;
		$.fn.userpopup.userinfo[oInfo.id] = oInfo;
	}
	
	$.fn.userpopup.defaults = {
		offsetX		:	9,
		offsetY		:	9,
		cacheTime	:	10000
	};
	
	$.fn.userpopup.userinfo = {},
	
	$.fn.userpopup.activeMemberId = 0;
		
})(jQuery);