var Ajax;
if (Ajax && (Ajax != null)) {
	Ajax.Responders.register({
		onCreate: function() {
			if ($('spinner') && Ajax.activeRequestCount > 0) {
				Effect.Appear('spinner',{ duration:0.5,queue:'end' });
			}
		},
		onComplete: function() {
			if ($('spinner') && Ajax.activeRequestCount == 0) {
				Effect.Fade('spinner',{duration:0.5,queue:'end'});
			}
		}
	});
}

//
//	Extension of jQueryUI progress bar to show value as percentage
//
$.fn.progressbarWithValue = function(options) {
	var defaults = {
		value: 50,
		labelAfter: '',
		labelBefore: '',
		label: ''
	};

	var options = $.extend(defaults, options);
	return this.each(function() {
		$(this).progressbar({ value: options.value });
		if (options.labelBefore || options.labelAfter) {
			options.label = options.labelBefore + options.value + options.labelAfter;
		}
		$(this).append('<div class="ui-progressbar-label">' + options.label + '</div>');
	});
};

function displayPageError(message) {
	$('#message .inner').html(message);
	$('#message').addClass('errors');
	$('#message').show('blind', 'slow');
}

function displayPageMessage(message) {
	$('#message .inner').html(message);
	$('#message').removeClass('errors');
	$('#message').show('blind', 'slow');
	setupMessageTimeouts();
}

var messageTimeout, messageTimeoutBak;
function setupMessageTimeouts() {
	messageTimeout = setTimeout(function() { hideMessage(); }, 2000);
	messageTimeoutBak = setTimeout(function() { hideMessage(); }, 10000);
}

function hideMessage() {
	$('#message').hide('blind', 'slow');
	clearMessageTimeouts();
}

function clearMessageTimeouts() {
	clearTimeout(messageTimeout);
	clearTimeout(messageTimeoutBak);
}

var loginSuccessCallback = null;
var loginFailureCallback = null;
function displayLoginForm(request, successCb, failureCb) {
	loginSuccessCallback = successCb;
	loginFailureCallback = failureCb;
	$('#loginForm').show('blind', 'slow');
}

function hideLoginForm() {
	$('#loginForm').hide('blind', 'slow');
}

function loginSuccess(data, textStatus) {
	hideLoginForm();
	if (loginSuccessCallback) {
		loginSuccessCallback(data, textStatus);
		loginSuccessCallback = null;
		loginFailureCallback = null;
	} else {
		displayPageMessage(data);
	}
}

function loginFailure(request, textStatus, error) {
	if (request.status == 401 || !loginFailureCallback) {
		$('#loginForm .register').hide();
		$('#loginFailure').html(request.responseText);
	} else {
		hideLoginForm();
		loginFailureCallback(request, textStatus);
		loginSuccessCallback = null;
		loginFailureCallback = null;
	}
}

function activityLoading(id) {
	$('#activitySpinner-' + id).toggle();
}

function activityDetailSuccess(data, textStatus, id) {
	$('#activityDetails-' + id).html(data);
	activityDetailToggle(id);
}

function activityDetailFailure(request, textStatus, error, id) {
	displayPageError(request.statusText);
	activityLoading(id);
}

function activityDetailToggle(id) {
	$('#activityDetails-' + id).toggle('blind','fast');
	$('#activity-' + id + ' div.box').toggleClass('expanded');
}

function progressSuccess(data, textStatus, id, choiceId) {
	$('#stream').prepend(data);
	$('#activity-' + id + ' .box').toggleClass('unused', false);
	var inputElem = $('#progressForm-' + id + ' input.progressInput');
	var numElem = $('#activity-' + id + ' .box .head .user-entered');
	if (numElem.length) {
		var inputVal = parseFloat(inputElem.val());
		var oldNumVal = parseFloat(numElem.html());
		numElem.html(oldNumVal + inputVal);
	} else {
		var labelElem = $('#activity-' + id + ' .box .head .value .label');
		var responseElem = $('#progressForm-' + id + ' input.response')
		if (responseElem.length) {
			labelElem.html(responseElem.val());
		} else if (choiceId) {
			labelElem.html($('#choice-' + choiceId + ' a.choice').html());
		}
	}
	inputElem.val('');
	setupStreamLinks(':first');
}

function checkSuccess(data, textStatus, id, choiceId) {
	$('#check-' + id + ' a.ui-bigcheck').toggleClass('displayNone');
	progressSuccess(data, textStatus, id, choiceId);
}

function progressFailure(request, textStatus, error, id) {
	var inputElem = $('#progressForm-' + id + ' input.progressInput');
	inputElem.val('');
	activityLoading(id);
	displayPageError(request.responseText);
}

function shoutSaving() {
	$('#shout').toggle();
	$('#shoutSpinner').toggle();
}

function shoutSuccess(data, textStatus) {
	$('#stream').prepend(data);
	$(".ui-talk textarea").val('');
	$(".ui-talk textarea").blur();
	setupStreamLinks(':first');
}

function shoutFailure(request, textStatus, error) {
	shoutSaving();
	displayPageError(request.responseText);
}

function heartLoading(streamEntryId) {
	$('#streamEntry-' + streamEntryId + ' .heart-button').toggleClass('loading');
}

function heartSuccess(data, textStatus, streamEntryId) {
	$('#streamEntry-' + streamEntryId + ' .heart-button').addClass('userSelected');
	incrementElementBody($('#streamEntry-' + streamEntryId + ' .heart-button .heart-count'));
	displayPageMessage(data);
}

function heartFailure(request, textStatus, error, streamEntryId) {
	if (request.status == 401) {
		heartLoading(streamEntryId);
		displayLoginForm(request);
	} else {
		displayPageError(request.responseText);
	}
}

function executeFeatLoading() {
	$('.executionStatus .executeButton').button('disable');
}

function executeFeatSuccess(data, textStatus) {
	$('.executionStatus').html(data);
	$('.executionStatus .button').button();
}

function executeFeatFailure(request, textStatus, error) {
	if (request.status == 401) {
		executeFeatLoading();
		displayLoginForm(request);
	} else {
		displayPageError(request.responseText);
	}
}

function toggleSuccess(data, textStatus, selector) {
	displayPageMessage(data);
	$(selector + ' span.buttonWrap').toggleClass('displayNone');
	$(selector).parents('li.selectable').toggleClass('selected');
}

function toggleFailure(request, textStatus, error, selector) {
	if (request.status == 401) {
		displayLoginForm(request);
	} else {
		displayPageError(request.responseText);
	}
}

function disableToggleButton(selector) {
	$(selector + ' button.small').button('disable');
}

function enableToggleButton(selector) {
	$(selector + ' button.small').button('enable');
}

function dialogLoadSuccess(data, textStatus, dialog) {
	dialog.html(data);
}

function dialogLoadFailure(request, textStatus, error, dialog) {
	displayPageError(textStatus);
}

function bootSuccess(data, textStatus, selector) {
	displayPageMessage(data);
	$(selector).hide('slow');
}

function bootFailure(request, textStatus, error, selector) {
	if (request.status == 401) {
		displayLoginForm(request);
	} else {
		displayPageError(request.responseText);
	}
}

function launchExecuteGoalDialog(url) {
	launchDialog(url, 'dialog-execute-goal', 'Let\'s do this thing!', 506);
}

function launchInviteFriendsDialog(url, challengeTitle) {
	launchDialog(url, 'dialog-invite-friends', 'Invite friends to ' + challengeTitle, 506);
}

function launchShareFeatDialog(url) {
	launchDialog(url, 'dialog-share-feat', 'Share the goal!');
}

function launchStartChallengeDialog(url) {
	launchDialog(url, 'dialog-create-challenge', 'Yes!Start your challenge...');
}

function launchSelectFeatDialog(url) {
	launchDialog(url, 'feat-selected', 'GREAT!Want to supersize your challenge?');
}

function launchEmailMembersDialog(url, challengeTitle) {
	launchDialog(url, 'dialog-email-members', 'Email the members of &ldquo;' + challengeTitle + '&rdquo;', 506);
}

function launchEmbedLeaderboardDialog(url) {
	launchDialog(url, 'dialog-embed-leaderboard', 'Embed Challenge Leaderboard', 506);
}

function launchCreateTeamDialog(url) {
	launchDialog(url, 'dialog-create-team', 'Create a team', 506);
}

function launchInviteOnlyJoinDialog(url, challengeTitle) {
	launchDialog(url, 'dialog-invite-only-join', 'Request to join \'' + challengeTitle + '\'', 506);
}

function launchCreateUnitsDialog(url) {
	launchDialog(url, 'dialog-create-units', 'Create Units', 1000);
}

var loginDialogTarget, loginDialogTargetTitle;
function dialogLoginSuccess(data, textStatus) {
	loginDialogTarget.html(data);
	loginDialogTarget.dialog({
		modal: true,
		draggable: false,
		resizable: false,
		title: loginDialogTargetTitle,
		width: 506
	});
	$("#dialog-login").dialog('close');
}

function dialogLoginFailure(request, textStatus, error) {
	$('#dialog-login .register').hide();
	$('#dialogLoginFailure').html(request.responseText);
}

function launchLoginDialog(eventualDialog, eventualDialogTitle) {
	loginDialogTarget = eventualDialog;
	loginDialogTargetTitle = eventualDialogTitle;
	var loadingDialog = $("#dialog-login").dialog({
		modal: true,
		draggable: false,
		resizable: false,
		dialogClass: 'login',
		title: 'Please login',
		width: 506
	});
}

function launchConfirmStreamDeleteDialog(entryId, returnUrl) {
	$("#dialog-confirm").find(".msg").html("If so, we'll erase the entry from your logs. That's the way to go if you're trying to fix a mistake. You can then re-post a corrected entry.");
	$("#revokeStreamEntryId").val(entryId);
	$("#revokeStreamEntryReturnUrl").val(returnUrl);
	var confirmDialog = $("#dialog-confirm").dialog({
		modal: true,
		draggable: false,
		resizable: false,
		dialogClass: 'confirm',
		title: 'Are you sure you want to delete this?',
		width: 506
	});
	return false;
}

function dialogLoadingOpen(size) {
	if (size==null) {
		size=506;
	}
	var loadingDialog = $("#dialog-loading").dialog({
		modal: true,
		draggable: false,
		resizable: false,
		dialogClass: 'loading',
		width: size
	});
	return loadingDialog;
}

function dialogLoadingClose() {
	var loadingDialog = $("#dialog-loading").dialog('close');
	return loadingDialog;
}

function launchDialog(url, divId, dialogTitle, size) {
	if (size == null) {
		size = 506;
	}
	var loadingDialog = dialogLoadingOpen(size);
	var dialog = $('<div id="' + divId + '" class="dialog ' + divId + '" style="display:hidden"></div>').appendTo('body');
	dialog.load(url, {}, function (responseText, textStatus, XMLHttpRequest) {
		if (XMLHttpRequest.status == 401) { // not authorized
			launchLoginDialog(dialog, dialogTitle);
		} else {
			dialog.dialog({
				modal: true,
				draggable: false,
				resizable: false,
				title: dialogTitle,
				width: 506
			});
		}
		loadingDialog.dialog('close');
	});
	return false;
}

// Manage activity form checkbox for row
function activityCheck(elem, sel) {
	expandActivityForm();
	var entry = $(this).parents('.activity').find('.entry');
	var input = $('input.progressInput' + sel);
	var legacyCheck = $('label.checkbox.' + sel);

	if ($(elem).is(':checked')) {
		if (legacyCheck) {
			$(legacyCheck).addClass('checked');
			$(legacyCheck).find('input:checkbox').attr('checked', true);
		}
		$('input.check' + sel).attr('checked', true);
		if (input.hasClass('number')) {
			input.val('0');
		}
		input.removeClass('placeheld');
		input.focus();

		$('div.stepper' + sel + ' .stepDown').removeClass('disabled');
	} else {
		if (legacyCheck) {
			$(legacyCheck).removeClass('checked');
			$(legacyCheck).find('input:checkbox').attr('checked', false);
		}
		$('input.check' + sel).attr('checked', false);
		input.val('');
		input.placeHeld();
		$('div.stepper' + sel + ' .stepDown').addClass('disabled');
	}
}

function stepUp(sel) {
	var val = parseInt($('input.progressInput.number.' + sel).val());
	if (isNaN(val)) {
		val = 0;
	} else {
		val = val + 1;
	}
	$('.stepper' + sel + ' a.stepDown').removeClass('disabled');
	$('input.progressInput' + sel).removeClass('placeheld');
	$('input.progressInput.number' + sel).val(val);
	$('input.check' + sel + ':checkbox').attr('checked',true);
	$('input.progressInput.number' + sel).change();
	$('input.progressInput.number' + sel).focus();
}
function stepDown(sel) {
	var val = parseInt($('input.progressInput.number' + sel).val());
	if (!val) {
		val = 0;
	}
	var newVal = val - 1;
	if (newVal < 0) {
		newVal = '';
		$('.stepper' + sel + ' a.stepDown').addClass('disabled');
		$('input.check' + sel + ':checkbox').attr('checked',false);
		$('input.progressInput.number' + sel).placeHeld();
	}
	$('input.progressInput.number' + sel).val(newVal);
	$('input.progressInput.number' + sel).change();
	$('input.progressInput.number' + sel).focus();
}

function toggleAndSyncCheckboxValues(obj, activitySelector, choiceId) {
	$('a.checkbox' + activitySelector).toggleClass('checked');
	if ($(obj).attr('checked')) {
		$('input' + activitySelector + '.progress').attr('checked', true);
		$('label.checkbox' + activitySelector).addClass('checked');
		$('input' + activitySelector + '.progress').val(choiceId);
		$('input' + activitySelector + '.revocation').val('');
	} else {
		$('input' + activitySelector + '.progress').attr('checked', false);
		$('label.checkbox' + activitySelector).removeClass('checked');
		$('input' + activitySelector + '.progress').val('');
		$('input' + activitySelector + '.revocation').val(choiceId);
	}
	expandActivityForm();
}

function selectAndSyncDropdownValue(activitySelector, choiceId, choiceValue) {
	$('.dropdown' + activitySelector + ' div.label').html(choiceValue);
	$('input' + activitySelector).val(choiceId);
	$('input' + activitySelector).closest('tr.activity').addClass('updated');
}

function friendsSelect() {
	var selId = numericalId(this);
	var oldVal = $('#selectedFollowers-' + selId).val();
	if (!oldVal) {
		$('#selectedFollowers-' + selId).val(selId);
	} else {
		$('#selectedFollowers-' + selId).val('');
	}
	$(this).toggleClass("ui-selected");
	return false;
}

jQuery(document).ready(function(){
	$("button").button();
	$(".button").button(); // links shown as button
	$("input[type='submit']:not(.no-button)").button();

	$("input[type='text']").addClass("text_");
	$("input[type='number']").addClass("text_");
	$("input[type='email']").addClass("text_");
	$("input[type='password']").addClass("text_");

	$('.sortLink').click(function() {
		var sortParam = $(this).attr('sortParam');
		$("input#querySort").val(sortParam);
		$(this).closest("form").submit();
		return false;
	});

	$('.limitLink').click(function() {
		var limitParam = $(this).attr('limitParam');
		$("input#queryLimit").val(limitParam);
		$(this).closest("form").submit();
		return false;
	});

	$('.sortFilterExpander').click(function() {
		$('.filter-options').toggle('blind','fast');
		$('.sortFilterExpander').toggleClass('expanded');
		return false;
	});

	$("div.ui-checkbox").click(function(){
		$(this).toggleClass("checked");
	});
	$("input.ui-checkbox").button();

	$("a.lightbox").fancybox({
		'transitionIn'	:	'fade',
		'transitionOut' :	'fade',
		'speedIn'		:	200,
		'speedOut'		:	200,
		'overlayShow'	:	false
	});
});

function removeHiddenFeat(fid) {
	$('#hiddenFeat-' + fid).attr('name', '');
	$('#hiddenFeat-' + fid).attr('value', '');
}

function categoryFilter(link) {
	var filterParam = $(link).attr('filterParam');
	$("input#categoryFilter").val(filterParam);
	$("form.search").submit();
	return false;
}

function removeCategoryFilter() {
	$("input#categoryFilter").val('');
	$("form.search").submit();
	return false;
}

function durationFilter(link) {
	var filterParam = $(link).attr('filterParam');
	$("input#durationFilter").val(filterParam);
	$("form.search").submit();
	return false;
}

function splitSummarySet(availWidth, ss, nextLnk) {
	var multipage = false;
	var theWidth = 0;
	$(ss).children('.summary-box').each(function(index) {
		theWidth = theWidth + this.offsetWidth;
		if (theWidth > availWidth) {
			theWidth = this.offsetWidth;
			multipage = true;
			var newSS = $('<div class="summary-set"></div>');
			$(ss).after(newSS);
			ss = newSS;
		}
		if (multipage) {
			ss.append(this);
		}
	});
	if (multipage) {
		$(nextLnk).show();
	}
}

function fb_login(loginHref) {
	FB.getLoginStatus(function(response) {
		if (response.authResponse) {
			window.location.href = loginHref;
		} else {
			displayPageError('Please allow permission to complete Facebook login.');
		}
	});
}

function oauth_fb_login(loginHref) {
	FB.getLoginStatus(function(response) {
		if (response.authResponse) {
			window.location.href = loginHref + '?accessToken=' + response.authResponse.accessToken ;
		} else {
			displayPageError('Please allow permission to complete Facebook login.');
		}
	});
}

function fb_ensureInit(callback) {
	if (!window.fb_apiInitialized) {
		setTimeout(function() { fb_ensureInit(callback); }, 50);
	} else {
		if (callback) { callback(); }
	}
}

/*
CSS Browser Selector v0.3.5 (Feb 05, 2010)
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/
function css_browser_selector(u){var ua = u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1;},g='gecko',w='webkit',s='safari',o='opera',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?'mobile':is('iphone')?'iphone':is('ipod')?'ipod':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win':is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent);


