(function($j) { 
$j.extend($j.fn, {
	requireUser: function(options) {

		if(options && typeof options == "function") {
			// if only a function is supplied
			options = {success: options};
		}
		
		if (!this.length) {
			options && options.debug && window.console && console.warn( "nothing selected, can't require user, returning nothing" );
			return;
		}
		
		this.each(function(){
			var element = this;
			var obj = $j(this);
		
			// default settings
			var settings = {
				requireNick: false,
				success: function(element, user) { return true; }
			};
			$j.extend(settings, options);
			
			
						
			if(!settings.event) {
				// default event for a given html element
				if(obj.is("form")) {
					settings.event = "submit";
				} else if(obj.is("a")) {
					settings.event = "click";
				}
			} else if(settings.event.indexOf("on") == 0) {
				// remove on before eventname (onclick -> click, onsubmit -> submit, etc)
				settings.event = settings.event.substring(2);
			}
	
	
			// Check that the user is logged in before the event.
			// If the user is not logged in, popup a login window.
			obj.bind(settings.event, function( e ) {
				if(Skiinfo && ( settings.requireNick ? !Skiinfo.Login.userHasNickName() : !Skiinfo.Login.userIsLoggedIn())) {
					/*	!Skiinfo.Login.userIsLoggedIn()
						|| (!settings.requireNick || !Skiinfo.Login.userHasNickName())
					)) {*/
					// var obj = this;
					var login = new Skiinfo.LoginForm({
						prefix: 'userRequired',
						requireNick: settings.requireNick,
						success: function(user) {
							var ret = settings.success.call(element, user);
							if(ret==false) { return false }
							
							if(obj.is("form")) {
								// submit form
								obj.get(0).submit();
							} else if(obj.is("a")) {
								// go to link location
								location.href = obj.attr("href");
							}
							
						},
						popup: true
					});
					e.preventDefault();
					return false;
				}
				
				return settings.success.call(this, Skiinfo.Login.currentUser);
			});
			return obj;
		
		});
	}
	
});

})(jQuery);
