var requiredValidationText          = "Please complete all required fields.";
var requiredShortValidationText     = "All fields are required.";
var agreeToTermsValidationText      = "Please agree to our Terms of Use and Privacy Policy.";
var screenNameValidationText        = "A screen name must have at least 3 characters and consist of only letters and numbers.";
var screenNameNotAvailable          = "A screen name is already in use.";
var passwordsValidationText         = "Passwords do not match.";
var invalidEmailValidationText      = "It\'s not a valid email.";
var requiredRadiosValidationText    = "Please answer all questions.";

$(document).ready(function(){
	if ($.browser.msie) $('body').addClass('ie');
	if ((navigator.userAgent.indexOf('iPhone') != -1) || (navigator.userAgent.indexOf('iPod') != -1) || (navigator.userAgent.indexOf('iPad') != -1)) $('body').addClass('iPad');
	$.preloadCssImages();	
	
	// Account logic
	$('.buttonTopBarMyWorkouts.selected').click(function(){
		if ($('div.account:visible').length) {
			$('div.account').slideUp();
			$('div.account-back').fadeOut();
			$('.buttonTopBarMyAccount').removeClass('selected');
			return false;
		}
	});
	var myAccountErrors = {};
	$('.buttonTopBarMyAccount').click(function(){
		if ($('div.account:visible').length) {
			//if ($('ul.account-menu').hasClass('small')) {
				saveErrorMessage();
				$('div.menu-item').fadeOut();
				$('#account-showall').fadeOut();
				$('ul.account-menu').removeClass('small');
				if ($.browser.msie && $.browser.version <= 7) {
					$('ul.account-menu li i, ul.account-menu li ins').show();
				}
			//} else {
				$('div.account').slideUp();
				$('div.account-back').fadeOut();
				$(this).removeClass('selected');
			//}
			$('ul.account-menu li a').removeClass('selected');
			$('#successContainer').remove();
			$('#errorsContainer').remove();
		} else {
			$('div.account-back').height( $(document).height() - 78 );
			$('div.account').slideDown(600, 'easeOutQuad');
			$('div.account-back').fadeIn();
			$('div.menu-item').hide();
			$('#account-showall').hide();
			$('ul.account-menu').removeClass('small');
			$(this).addClass('selected');
			if ($.browser.msie && $.browser.version <= 7) {
				$('ul.account-menu li i, ul.account-menu li ins').show();
			}
		}
		return false;
	});
	
	$('#account-showall').click(function(){
		saveErrorMessage();
		$('div.menu-item').fadeOut();
		$('#account-showall').fadeOut();
		$('ul.account-menu').removeClass('small');
		if ($.browser.msie && $.browser.version <= 7) {
			$('ul.account-menu li i, ul.account-menu li ins').show();
		}
		$('ul.account-menu li a').removeClass('selected');
		$('#successContainer').remove();
		$('#errorsContainer').remove();
	});
	
	$('div.account-back').click(function(){
		saveErrorMessage();
		$('div.account').slideUp();
		$('div.account-back').fadeOut();
		$('ul.account-menu li a').removeClass('selected');
		$('.buttonTopBarMyAccount').removeClass('selected');
		$('#successContainer').remove();
		$('#errorsContainer').remove();
	});

	$('div.account .b-list .b').live('click', function(e){ //click(function(){
		$(this).closest('.menu-item').find('div.menu-item-content').hide();
		var showTab = $(this).attr('href');
		// IE7 fix
		showTab = showTab.substring(showTab.indexOf('#'));
		$(showTab).show();
		e.stopImmediatePropagation();
		return false;
	});
	
	$('ul.account-menu li a').each(function(){
		$($(this).attr('href')).prepend('<a href="#" class="icon ' + $(this).attr('class') + '"><i><ins></ins></i></a>');
		$($(this).attr('href')).prepend('<h5>' + $(this).text() + '</h5>');
	});
	$('div.menu-item a.icon').click(function(){ return false; });
	
	$('ul.account-menu li a').click(function() {
		if ($('div.account:animated').length) return false;
		if ($(this).hasClass('selected') || $(this).parent().hasClass('hidden')) return false;
	 	saveErrorMessage();
		$('ul.account-menu li a').removeClass('selected');
		$(this).addClass('selected');
		href = $(this).attr('href');
		if ($('ul.account-menu').hasClass('small')){
			$('#successContainer').remove();
			$('#errorsContainer').remove();
			appear(href);
		} else {
			$('ul.account-menu').fadeOut(500, function(){ appear(href) });
		}
		return false;
	});
	
	function saveErrorMessage() {
		if ($('#messageContainerMyAccount #errorsContainer').length) {
			form = $('ul.account-menu li a.selected').attr('href');
			form = form.substring(1);
			form = form.replace(/-/g, '_');
			myAccountErrors[form] = $('#messageContainerMyAccount #errorsContainer').text();
		}
	}

	function appear(show)
	{
		$('ul.account-menu').hide();
		$('ul.account-menu').addClass('small');
		$('#account-showall').fadeIn();
		$('div.menu-item').fadeOut();
		$('ul.account-menu').fadeIn(500);
		$(show).fadeIn(500);
		
		var loadForm = {
			'#account-personal-information'     : "personal_information",
			'#account-payment-details'          : "payment_information",
			'#account-social-networks'          : "settings",
			'#account-program-subscriptions'    : "program_subscriptions",
			'#account-transaction-history'      : "transaction_history",
			'#account-calendar-synchronization' : "calendar_integration"
		}

		if (!$(show).find('.menu-item-inner').length) {
			$.getRenderedForm(loadForm[show], function(data) {
	            $(show).append(data);
				initializeButtons($(show));
				initializeInputs($(show));
				initializeTables($(show));
	        });
		}
		
		if ($('ul.account-menu li a.selected').length) {
			form = $('ul.account-menu li a.selected').attr('href');
			form = form.substring(1);
			form = form.replace(/-/g, '_');
			if (myAccountErrors[form] !== undefined && myAccountErrors[form] != "")
				showCustomError('messageContainerMyAccount', myAccountErrors[form]);
			myAccountErrors[form] = "";
		}
		if ($.browser.msie && $.browser.version <= 7) {
			$('ul.account-menu li i, ul.account-menu li ins').hide();
		}
	}
	
	// hintboxes on account
	$('ul.account-menu li a').removeAttr('title');
	
	// supported devices
	$('.buttonPrimetimeMobileApps').click(function(){ 
		$('div.back-grey').toggle();
		$('.supported-devices .sd-shadow').toggle();
		$('.supported-devices .sd-wrapper').toggle();
		$('.supportedDevices').toggleClass('selected');
		if ($('body').hasClass('iPad'))
			$(this).css({backgroundPosition: '0 0'});
		return false;
	});
	$('.supported-devices .sd-shadow').click(function(){
		hideSD();
	});
	$(document).click(function(e){
		var elem = $(e.target);
		var sd = false;
		while (elem[0].tagName.toUpperCase() != "BODY"){
			if (elem.hasClass('supported-devices')) sd = true;
			elem = elem.parent();
		}
		if (!sd) hideSD();
	});
	
	function hideSD() {
		$('div.back-grey').hide();
		$('.supported-devices .sd-shadow').hide();
		$('.supported-devices .sd-wrapper').hide();
		$('.supportedDevices').removeClass('selected');
	}
	
	$('a.sd-right-arrow').click(function(){
		$('ul.page1').fadeOut('slow', function(){
			$('ul.page2').fadeIn('slow');
			$('a.sd-left-arrow').fadeIn('slow');
		});
		$(this).fadeOut('slow');
		return false;
	});
	$('a.sd-left-arrow').click(function(){
		$('ul.page2').fadeOut('slow', function(){
			$('ul.page1').fadeIn('slow');
			$('a.sd-right-arrow').fadeIn('slow');
		});
		$(this).fadeOut('slow');
		return false;
	});
		
	//user logged in
	if ($('.buttonTopBarMyAccount').length > 0) {
		
        $.totalTodayAndOverdueActivities(function(overdue_total, today_total) {
            if (parseInt(overdue_total) > 0) {
                $('span.badgeOverdue').html(formatDigit(overdue_total)).fadeIn(600);
            }
            if (parseInt(today_total) > 0) {
                $('span.badgeToday').html(formatDigit(today_total)).fadeIn(600);
            }
        });
	}
    
	// user logged in and primetime menu is shown
	if ($('.buttonTopBarMyAccount').length > 0 && $('.buttonPrimetimeMobileApps').length > 0) {
        //Be notified buttons
        $.getJSON('/release-notification-subscribed/', function(data) {
			$('a.be-notified').each(function(){
				device = $(this);			
				if (data[device.parent().attr('class')]) {
					device.hide();
					device.after('<span class="notified">You will be notified</span>');
				}
			});
		});
	}
	
	$('a.be-notified').click(function(){
		$('a.be-notified').each(function(){
			if ($(this).next().hasClass('notified-email'))
				$(this).show().next().hide();
		});
		device = $(this);
		if ($('.buttonTopBarMyAccount').length > 0) // user logged in
		{
			$.getJSON('/release-notification-subscribed/', function(data) {
				if (!data[device.parent().attr('class')])
					$.post('/release-notification/' + device.parent().attr('class') + '/', function() {
						device.hide();
						device.after('<span class="notified">You will be notified</span>');
					});
            });
		} else 
		{
			$(this).fadeOut();
			$(this).next().fadeIn();
		}
		return false;
	});
	
	$('div.notified-email .b').click(function(){
		if (!isValid($(this).parent()) || !isValidForm($(this).parent())) return;
		var th = $(this);
		$.post('/release-notification/' + $(this).parent().parent().attr('class') + '/' + $(this).parent().find('input').val() + '/', function(){ 
			th.parent().hide();
			th.parent().after('<span class="notified">You will be notified</span>');
		});
	});

    $(".twitter_connect").twitterButton();
    
    
    $(".pre_assessment_start").click(function() {
        $('.assess-content').attr("mode", "pre-assessment");
        $.startPreAssessment($(this).attr('href'), $(this).attr('id'),
            function(data) {
                $('.assess-content').html(data);
                $('#assess-page-0').show();
                $('#assess-next span').text('Get started');
                $('#assess-next').show();
                $('span.pages').hide();
                
				if ($.trim($('#assess-page-0').text()) == "")
					$('#assess-next').click();
                fixAssessment();
            }, 
            function() {//pre_load event
              cleanErrors();
              $('.assess-content').html('<span class="loading"><i></i></span>');
              showAssessment();
            }
        );
        return false;
    });
    
	buttonStartText = $(".start_plan").text();
    $(".start_plan").click(function() {
		if ($(this).find('span').text() != "")  
			$(this).find('span').html('<b class="loader"></b>')
		else {
		 	return false;
		}
        $.startPlan($(this).attr('href'), 
                function(data) {
					$('.assess-content').html(prepareAssessHtml(data));
					prepareAssessJs();
				    $('#assess-page-0').show();
					$('#assess-next span').text('Get started');
					$('#assess-next').show();
					$('span.pages').hide();

					if ($.trim($('#assess-page-0').text()) == "")
						$('#assess-next').click();
					fixAssessment();
					
					// automatic questions answerator :)
					//$('.assess-content .radios').each(function(){
					//	$('li:first span', $(this)).click();
					//});
                },
                function() {//in case when doesn't
                    window.location.reload();
                },
                function() {//pre_load event
                  cleanErrors();
                  $('.assess-content').html('<span class="loading"><i></i></span>');
                  showAssessment();
                }
        );
        return false;
    });

	$(window).resize(fixAssessment);
    
	// assessment close
	$('.assess .close').click(function(){
		hideAssessment();
	});
	$('.assess').click(function(e){
		if ($(e.target).hasClass('assess')) 
			hideAssessment();
	});
    
    $('#assess-next').live('click', function(){
		
		curr  = parseInt($('#page-curr').text());
        total = parseInt($('#page-total').text());
		assessErrors = false;
		$('#assess-page-' + curr + ' input.required').each(function(){
			if ($(this).val() == "") assessErrors = true;
		});
		if (assessErrors) {
			showCustomError('messageContainerAssess', requiredRadiosValidationText);
			return false;
		}
		$('#stickyHeaders').hide();
		cleanErrors();
		if (curr == total + 1) {
		    window.location.reload();
			$('#assess-next span').html('<b class="loader"></b>');
			return false;
		}
		if (total > 1) $('span.pages').show();
		$('#assess-next span').text('Continue');
        if (curr <= total) {
            $('.assess-page').hide();
            $('#assess-page-' + (curr + 1)).show();
            $('#page-curr').text(formatDigit(curr+1));
			fixAssessment();
        }
		if (curr == total - 1)
			$('#assess-next span').text('Finish');
		if (curr == total)
		{
			$('#assess-page-' + (curr + 1)).hide();
			$('.assess-content').append('<span class="loading with-header"><i></i></span>');
			$('span.pages').hide();
			$('#assess-next').hide();
			$('#assess-next span').text('Close');
            
            _method = $('.assess-content').attr("mode") == "pre-assessment" ? "submitPreAssessmentAnswers" : "submitAssessmentAnswers";
			$.postFormData({method: _method, params: collectValuesToJson($('div.assess')) }, function(result) {
                   if (result.has_finish_page) {
                       /*$.getRenderedForm("assessment_completed", function(data) {
                            $('.assess-content span.loading').remove();
                            $('#assess-page-' + (curr + 1)).html(data).show();
                            $('#assess-next').show();
                       });*/
						$.getAssessmentResult(function(data){
							$('.assess-content span.loading').remove();
	                        $('#assess-page-' + (curr + 1)).html(prepareAssessFinishHtml(data)).show();
							if (data.media_url) prepareAssessFinishJs(data.media_url);
	                        $('#assess-next').show();
						});
                   } else {
                       $('.assess-content span.loading').remove();
                       //IF ASSESSMENT DOESN'T HAVE A LAST PAGE
						window.location.reload();
                   }
            });
		}
    });
	
    //mediaplayer
    if ($.fn.mediabrowser)
        $(".mediaBrowser").mediabrowser({ type: 'standalone' });
    
    
    $(".cancel_subscription").live('click', function() {
        if (confirm('Are you sure ?')) {
            row = $(this).parent().parent();
            $.cancelSubscription(row.attr('id'), function(data) {
                row.remove();
            });
        }
        return false;
    });
    
    $(".cancel_pre_order").live('click', function() {
        if (confirm('Are you sure ?')) {
            row = $(this).parent().parent();
            $.cancelPreOrder($(this).attr('href'), function(data) {
                row.remove();
            });
        }
        return false;
    });
    
    $(".request_refund").live('click', function() {
        row = $(this).parent().parent();
        $(this).fadeOut();
        $.requestRefund(row.attr('id'), function(data) {
            $("td:eq(3)", row).html('<span style="display:none;">Refunded</span>');
            $("td:eq(1)", row).html('<span style="color:red;display:none;">Expired</span>');
            $("td:eq(1) span", row).fadeIn(600);
            $("td:eq(3) span", row).fadeIn(600);
        });
        return false;
    });
    
    $(".request_renew").live('click', function() {
        row = $(this).parent().parent();
        $(this).fadeOut();
        $.renewNow(row.attr('id'), function(data) {
             var currentTime = new Date();
             $("td:eq(1)", row).html('<span style="display:none;">' + formatDigit(currentTime.getDate()) + "-" + formatDigit(currentTime.getMonth() + 1) + "-" + (currentTime.getFullYear() + 1) + '</span>');
             $("td:eq(1) span", row).fadeIn(600);
        });
    });
    
    $(".auto_renewal").live('click', function() { 
        self = $(this);
        row = self.parent().parent();
        $.autoRenewal(row.attr('id'), self.attr('href') == "1", function(data) {
              self.html(self.attr('href') == "1" ? "Disable" : "Enable")
                  .attr('href', self.attr('href') == "1" ? 0 : 1);
        });
        return false;
    });
    
	//start assessment 
    $(".take_assessment").live('click', function() {
        $('.assess-content').html('<span class="loading"><i></i></span>');
        showAssessment();
        $.startQuestionnaireAtSpecifiedTime($(this).attr('href'), function(data) {
             $('.assess-content').html(data);
             $('#assess-page-0').show();
             $('#assess-next span').text('Get started');
             $('#assess-next').show();
             $('span.pages').hide();

			 if ($.trim($('#assess-page-0').text()) == "")
				$('#assess-next').click();
             fixAssessment();
        });
        return false;
    });
	if ($.browser.msie && $.browser.version <= 8)
		$('.assess').addClass('ie');
		
	$('.assess').scroll(function(){
		
		if (!$('.assess-page:visible h4.assess-block').length) return;
		
		var hTop = [0];
		$('.assess-page:visible h4.assess-block').each(function(){
			hTop.push($(this).position().top + 78);
		});
		hTop.push(100000);
		var st = $('.assess')[0].scrollTop;
		
		if (hTop[0] <= st && st < hTop[1]) {
			$('#stickyHeaders').hide().removeData('headerNumber');
		}
		else {
			var i = -1; while (hTop[++i + 1] < st);
			if (st >= hTop[i + 1] - 150) { 
				if (70 - st + hTop[i + 1] - 150 <= 0)
					$('#stickyHeaders').hide().removeData('headerNumber');
				else {
					$('#stickyHeaders').show();
					$('#stickyHeaders').html($('.assess-page:visible h4.assess-block:eq(' + (i - 1) + ')').clone()).data('headerNumber', i - 1);
					$('#stickyHeaders').height(70 - st + hTop[i + 1] - 150);
				}
				return; 
			}
			$('#stickyHeaders').height('auto');
			if ($('#stickyHeaders').data('headerNumber') == (i - 1)) return;
			$('#stickyHeaders').show().html($('.assess-page:visible h4.assess-block:eq(' + (i - 1) + ')').clone()).data('headerNumber', i - 1);
			
			var params = {
				quality           : "best",
				menu              : "false",
				scale             : "noscale",
				salign            : "lt",
				allowscriptaccess : "always",
				wmode             : "transparent"
			};
			$('#stickyHeaders div.variants').html('');
			$('#stickyHeaders div.variants').append('<div id="dyn-labels" />');
			swfobject.embedSWF('/_static/swf/labels.swf', 'dyn-labels', 400, 96, "9.0.0",false, { headers: GLOBALlabels }, params);
		}
	});
	
	// did it
	$('.acts-period .did_it').live('click', function(e) {
		var list_item = $(this).closest('.acts-list-item');
		var uai = list_item.attr('user-activity-id');
		
		$.completeActivity(uai, 1, function () {
			finishActivity(list_item, uai);
		});
		
		e.stopImmediatePropagation();
		return false;
	});
	// ignore
	$('.acts-period .ignore_it').live('click', function(e) {
		
		sureHtml = '<b class="sure">Sure?</b> <b class="sep"></b><b class="yes">Yes</b> <b class="sep"></b><b class="no">No</b>';
		$(this).find('span').html(sureHtml);
		var ia = $(this);
		ia.addClass('sure');
		ia.find('b.yes').click(function(){
			var list_item = $(this).closest('.acts-list-item');
			var uai = list_item.attr('user-activity-id');

			$.ignoreActivity(uai, 1, function() {
				finishActivity(list_item, uai);
			});
			
			return false;
		});
		ia.find('b.no').click(function(){
			ia.find('span').html('<i style="left: 1px;"></i>Ignore');
			ia.removeClass('sure');
			return false;
		});
		e.stopImmediatePropagation();
		return false;
	});
	
	//ie7 and ie8 fix
	if ($.browser.msie && $.browser.version <= 8)
		$('div.overview-block:odd').addClass('even');
});


function prepareAssessHtml(data) {
	var html = '\
	<h2>\
	    <ins>' + data.name + " / " + data.program_name + '</ins>\
	    <span class="pages">\
	        <span id="page-curr">0</span> / <span id="page-total">' + (parseInt(data.groups.length) < 10 ? "0" + data.groups.length : data.groups.length) + '</span>\
	        : Stress in your personal life\
	    </span>\
	</h2>\
	<div id="assess-page-0" class="assess-page">\
	    <div class="welcome">\
	        <div class="text">\
	            <h4>' + data.welcome_title + '</h4>\
	            <div>' + data.welcome_text + '</div>\
	        </div>\
	    </div>\
	</div>';
	var curr_page = 1;
	
	for (var groupIndex in data.groups) {
		var group = data.groups[groupIndex];
		html += '<div id="assess-page-' + curr_page + '" class="assess-page">';
	    
		if (data.short_description != "") html += 
			'<div class="assess-page-descr">\
		    	<div style="width:550px;">' + data.short_description + '</div>\
		    </div>';
	    
		html += '<h4 class="assess-block">' + group.name + '<ul class="variants">';
		var ind = 1;
        for (var titleIndex in group.header)
        	html += '<li class="variant-' + ind++ + '">' + group.header[titleIndex] + '</li>'
        html += '</ul></h4>';

		html += '<div class="assess-block"><dl>';
		for (var questionIndex in group.questions) {
			var question = group.questions[questionIndex];
            html += '<dt>' + question.name + '</dt>\
            <dd>\
                <ul class="radios' + (question['answers'][0]['key'] != "" ? " radios-text" : "") + '">';
                    for (var answerIndex in question.answers) {
						var answer = question.answers[answerIndex];
                        html += '<li><span class="radio" name="' + question.id + '" valueid="' + answer.value + '"><i></i> ' + (answer.key == "" ? '&nbsp;' : answer.key) + '</span></li>'; 
					}
            html += '</ul>\
                <input type="hidden" class="required" name="' + question.id + '" />\
            </dd>';
        }
        html += '</dl></div>';
		
		html += '</div>';
		curr_page++; 
	}
	html += '<div id="assess-page-' + curr_page + '" class="assess-page">\
	    <div class="finish">\
	        <h4>Thank you!</h4>\
	        <p>Now, we\'re ready to provide you with<br />\
	        personalized activities. Good luck.</p>\
	    </div>\
	</div>';
	GLOBALlabels = data.groups[0].header.join(';') + '&first=15&space=40';
	return html;
}

function prepareAssessJs(){
	$('ul.variants').after('<div class="variants-background" />');
    $('dl').each(function(){
        $(this).find('dt:eq(0)').addClass('first');
        $(this).find('dd:eq(0)').addClass('first');
        $(this).find('dt:eq(' + ($(this).find('dt').length - 1) + ')').addClass('last').wrapInner('<div class="dt-last" />');
        $(this).find('dd:eq(' + ($(this).find('dd').length - 1) + ')').addClass('last').wrapInner('<div class="dd-last" />');;
    });
    $('.assess-page').show();
    $('.assess ul.radios li span.radio').each(function(){
        var lh = $(this).closest('dd').prev().outerHeight();
        $(this).css({ height: lh, lineHeight: lh + 'px' });
    });
    $('.assess-page').hide();
    
    if (/Win/.test(navigator.platform)) {
        var params = {
            quality           : "best",
            menu              : "false",
            scale             : "noscale",
            salign            : "lt",
            allowscriptaccess : "always",
            wmode             : "transparent"
        };
        $('ul.variants').hide().after('<div class="variants"><div id="ass-labels"></div></div>');
        swfobject.embedSWF('/_static/swf/labels.swf', 'ass-labels', 400, 96, "9.0.0",false, { headers: GLOBALlabels }, params);
        $('.variants-background').hide();
    }
	$('body').append('<div id="stickyHeaders" style="display: none;" />');
}

function prepareAssessFinishHtml(data) {
	var html = '';
	if (!data.media_url) {
		html += '<div class="finish">\
	        <div class="text">\
	            <h4>' + data.name + '</h4>\
	            <div>' + data.text + '</div>\
	        </div>\
		</div>';
	} else {
		html += '<div class="finish" style="padding: 20px 0 0; height: 528px;">\
	        <div class="final-video"><div id="final-video"></div></div>\
	    </div>';
	}
	return html;
}

function prepareAssessFinishJs(url) {
	var parameters = {
         quality           : "best",
         menu              : "false",
         scale             : "noscale",
         salign            : "lt",
         allowscriptaccess : "always",
         allowfullscreen   : "true",
         wmode             : "transparent"
     };
     var flashvariables = { dataPath  : url };
     swfobject.embedSWF("/_static/swf/plugins/mediabrowser/mw_mediaplayer.swf", "final-video", 940, 528, "9.0.0",false, flashvariables, parameters);
	
	if ($('body').hasClass('iPad')) {
		var dp = flashvariables.dataPath;
		$.ajax({
			type: "GET",
			url: dp.substring(dp.indexOf('/', 10)),
			dataType: "xml",
			success: function(xml) {
				var index = parseInt($(xml).find('gallery').attr('startIndex'));
				if (!(index >= 0)) index = 0;
				//link.attr('href', $(xml).find('url').eq(index).text());
				window.location.href = $(xml).find('url').eq(index).text();
			}
		});
	}
}

function finishActivity(list_item, uai) {

	if (list_item.closest('#period-today').length || (list_item.closest('#period-week').length && list_item.closest('tr').hasClass('today'))) { //today || weekly today
		if (list_item.closest('.acts-set-item').hasClass('overdue')) {
			updateWeekOverdueCount($('#period-week li[user-activity-id="' + uai + '"]').closest('.acts-week'), 1);
			updateWorkoutsBadges(0, 1);
		} else {
			updateWorkoutsBadges(1, 0);
		}
	} else { //overdue or weekly
		if (list_item.closest('.acts-set-item').hasClass('overdue')) {
			updateOverdueTabCount(1);
			updateWeekOverdueCount($('#period-overdue li[user-activity-id="' + uai + '"]').closest('.acts-week'), 1);
			updateWeekOverdueCount($('#period-week    li[user-activity-id="' + uai + '"]').closest('.acts-week'), 1);
			updateWorkoutsBadges(0, 1);
		} else {
			updateWorkoutsBadges(1, 0);
		}
	}
	
	if (list_item.siblings().length)
		$('.acts-period li[user-activity-id="' + uai + '"]').remove();
	else {
		if (!list_item.parent().parent().siblings().length) {
			var tbl = list_item.closest('.acts-week-table').children('table');
			if (tbl.length) {
				if (tbl.find('.acts-set-item').length < 2) 
					list_item.closest('.acts-week').hide();
				else 
					list_item.closest('.acts-set-item').hide();
			} else {
					list_item.closest('.acts-week').hide();
			}
		}
		$('.acts-period li[user-activity-id="' + uai + '"]').parent().parent().remove();
	}	
}

function formatDigit(digit)
{
    if (digit > 9) return digit;
    return '0' + digit;
}

function fixAssessment()
{
	$('.assessInner').removeClass('scroll');
	if ($('div.assess').height() < $('div.assessInner').height() + 144 && !$('body').hasClass('iPad'))
		$('.assessInner').addClass('scroll');
		
	if ($('body').hasClass('iPad')) {
		$('body').css({ minHeight: $('div.assess-content').height() + 230});
	}
		
	$('div.assess').width('100%');
	var w = $('div.assess').width();
	if ($.browser.webkit)
		$('.assess').css({ left: -(w&1), width: w + (w&1) })
	else
		$('.assess').css({ left: (w&1) - 1, width: w - (w&1) + 1 });
}

function showAssessment()
{
	$('.assess').fadeIn();
	$('#assess-next').hide();
	$('body, html').addClass('assessMode');
	fixAssessment();
}

function hideAssessment()
{
	$('.assess').fadeOut();
	$('#stickyHeaders').remove();
	$('body, html').removeClass('assessMode').css({ minHeight: 0});
	if ($('.start_plan').length)   $('.start_plan').find('span').text(buttonStartText);
	if ($('#restart_plan').length) $('#restart_plan').find('span').text('Restart plan');
	if ($('#restart_plan2').length) $('#restart_plan2').find('span').text('Start plan again');
}

function cleanErrors(cont)
{
	$('#errorsContainer').remove();
	//cont.find('.b').removeClass('error');
	//cont.find('input').parent().removeClass('error');
}

function clearErrorsAndForm(cont)
{
	$('#errorsContainer').remove();
	cont.find('.b').removeClass('error');
	cont.find('input').parent().removeClass('error');
	cont.find('input[title]').each(function(){
		$(this).addClass('inputplaceholder');
		$(this).val($(this).attr('title'));
	});
	cont.find('.b-select-box').each(function(){
		$(this).find('span').html('<i></i>' + $(this).next().attr('default'));
		$(this).next().find('ul .selected').removeClass('selected');
		$(this).next().next().length > 0 && $(this).next().next().val('');
		$(this).next().find('input').val('');
	});
}

function isValid(cont)
{
	var valid = true;
	cont.find('input.email').each(function(){
		if (!$(this).hasClass('inputplaceholder') && $(this).val() != "" && !isValidEmail($(this).val())) { 
			$(this).parent().addClass('error'); valid = false;
			showError(invalidEmailValidationText);
		}
	});
	cont.find('input[class^=equal-to]').each(function(){
		var passwords = $('input.equal-to-' + $(this).attr('class').substring(9));
		if (passwords.eq(0).val().length > 0 &&
			passwords.eq(1).val().length > 0 && 
			passwords.eq(0).val() != passwords.eq(1).val()) 
		{ 
			passwords.parent().addClass('error'); valid = false; 
			showError(passwordsValidationText);
		}
	});
	cont.find('a.b-icon-name-checkbox.required').each(function(){
		if (!$(this).hasClass('selected')) { 
			$(this).addClass('error');
		}
	});
	return valid;
}

function isValidForm(cont)
{
	var valid = true;
	cont.find('input.required').each(function(){
		if ($(this).hasClass('inputplaceholder') || $(this).val() == "") { 
			$(this).parent().addClass('error'); 
			$(this).parent().data('errorMessage', requiredValidationText);
			valid = false; 
		}
	});
	cont.find('input[class^=equal-to]').each(function(){
		var eq = $(this).attr('class').substring(9);
		if ($(this).val() == "") 
		{ $(this).parent().addClass('error'); valid = false; }
	});
	cont.find('a.b-select-box.required').each(function(){
		if ($(this).hasClass('b-select-box-multiple')) {
			if ( $(this).next().find('.b.selected').length > 0 ) $(this).removeClass('error');
			else { $(this).addClass('error'); valid = false; }
		} else {
			if ($(this).next().attr('default') == $.trim($(this).text())) { $(this).addClass('error'); valid = false; }
			else $(this).removeClass('error');
		}
	});
	return valid;
}

function nextError(cont)
{
	$('#errorsContainer').remove();
	if (cont.find('.inp.error').length <= 0 && cont.find('a.b.required.error').length <=0) return;
	var msg = "";
	if (cont.find('.inp.error').length)
		msg = cont.find('.inp.error:eq(0)').data('errorMessage');
	else if (cont.find('a.b.required.error').length)
		msg = requiredValidationText;
	else 
		msg = "Something going wrong :("
	showError(msg);
}

function showError(errorText)
{
	if ($('#errorsContainer').length && $('#errorsContainer').text() == errorText) return;
	$('#messageContainerTop').html('<div id="errorsContainer" style="display: none;"><p>' + errorText + '</p></div>');
    $('#errorsContainer').fadeIn('slow');
}

function showSuccess(successText)
{
	$('#messageContainerTop').html('<div id="successContainer" style="display: none;"><p>' + successText + '</p></div>');
    $('#successContainer').fadeIn('slow');
	
	setTimeout(function(){
		$('#successContainer').fadeOut('slow', function() {
			$('#successContainer').remove();
		});
	}, 3000);
}

function showCustomError(cont, errorText)
{
	$('#' + cont).html('<div id="errorsContainer" style="display: none;"><p>' + errorText + '</p></div>');
    $('#errorsContainer').fadeIn('slow');
}

function showCustomSuccess(cont, successText)
{
	$('#' + cont).html('<div id="successContainer" style="display: none;"><p>' + successText + '</p></div>');
    $('#successContainer').fadeIn('slow');
	
	setTimeout(function(){
		$('#successContainer').fadeOut('slow', function() {
			$('#successContainer').remove();
		});
	}, 3000);
}


function isValidEmail(value) {
	return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
}
function isValidNumber(value) {
	return /^[0-9]+$/i.test(value);
}

function collectValuesToJson(cont)
{
	res = {};
	cont.find('input').each(function(){
		var key = $(this).attr('name');
		var val = $(this).val();
		if (key.indexOf("[]") > 0) {
			key = key.slice(0, -2);
			if (res[key] == undefined) res[key] = [];
			if (val != "") res[key].push(val);
		} else
			res[key] = $(this).val();
	});
	cont.find('textarea').each(function(){
		res[$(this).attr('name')] = $(this).val();
	});
	return res;
}

function initializeTables(cont)
{
	cont.find('table.table-body').each(function(){
		$(this).find('tr:odd').addClass('odd');
	});
	
	cont.find('div.table').each(function(){
		tb = $(this).find('table.table-body');
		cnt = $(this).find('table.table-header th').length;
		$(this).find('table.table-header th').each(function(){
			if ($(this).index() != cnt - 1 )
				tb.find('tr td:eq(' + $(this).index() + ')').width( $(this).width() );
		});
	});
	
	cont.find('.table-scroll').each(function(){
		if (!$(this).find('.empty-table').length) {
			var elem = $(this), arr = [];
			while (elem[0].tagName.toUpperCase() != "BODY"){
				if (elem.css('display') == "none") { arr.push(elem); elem.show(); }
				elem = elem.parent();
			}
			$(this).jScrollPane({verticalDragMinHeight : 42, verticalDragMaxHeight : 42});
			$.each(arr, function(){ $(this).hide(); });
		}
	});
}

function updateWorkoutsBadges(chngToday, chngOverdue) {
	var badgeOverdue = $('#top .badgeOverdue');
	var badgeToday   = $('#top .badgeToday');
	var newOverdue = parseInt(badgeOverdue.text(), 10) - chngOverdue;
	var newToday   = parseInt(badgeToday.text(), 10) - chngToday;
		
	if (newOverdue <= 0)
		badgeOverdue.text('0').fadeOut(600);
	else
		badgeOverdue.text(formatDigit(newOverdue)).fadeIn(600);
		
	if (newToday <= 0)
		badgeToday.text('0').fadeOut(600);
	else
		badgeToday.text(formatDigit(newToday)).fadeIn(600);
}

function updateOverdueTabCount(chng) {
	var currOverdueCount = $('#period .overdue span').text();
	currOverdueCount = parseInt(currOverdueCount.substring(currOverdueCount.indexOf('(') + 1)) - chng;
	$('#period .overdue span').text('Overdue (' + (currOverdueCount) + ')');
	
	currOverdueCount == 0 && $('#period .overdue').hide();
	currOverdueCount == 0 && $('#period .overdue .b').hasClass('selected') && $('#period .today .b').click();
}

function updateWeekOverdueCount(actWeek, chng) {
	var weekOverdueSpan = actWeek.children('.acts-week-header').find('span.overdue-count');
	var weekOverdueCount = parseInt(weekOverdueSpan.text()) - chng;
	weekOverdueSpan.text(weekOverdueCount + ' overdue activit' + (weekOverdueCount > 1 ? 'ies' : 'y'));
	
	weekOverdueCount == 0 && actWeek.removeClass('overdues');
	weekOverdueCount == 0 && actWeek.closest('#period-overdue').length && actWeek.fadeOut(function(){ $(this).remove(); });
}

function syncWorkoutsColumnsHeights() { 
	$('.act-right').height( $('.act-left').height() );
}

jQuery.extend({
   postFormData: function(json_object, callback) {
      $.post("/forms-rpc/", {rpc : JSON.stringify(json_object) }, callback, "json");
   },
   getRenderedForm: function(form_name, callback) {
      $.get("/forms-rpc/getForm/" + form_name + "/", callback);
   },
   connectToTwitter: function(connection_type, callback) {
      $.postFormData({"method":"connectToTwitter", "params":{"type": connection_type}}, callback);
   },
   connectToFacebook: function(connection_type, callback) {
      $.postFormData({"method":"connectToFacebook", "params":{"type": connection_type}}, callback);
   },
   completeActivity: function(user_activity_id, completion_type, callback) {
      $.postFormData({"method":"completeActivity", "params":{"user_activity_id": user_activity_id, "completion_type" : completion_type}}, callback);
   },
   ignoreActivity: function(user_activity_id, type, callback) {
      $.postFormData({"method":"ignoreActivity", "params":{"user_activity_id": user_activity_id, "type": type }}, callback);
   },
   startQuestionnaireAtSpecifiedTime: function(user_activity_id, callback) {
      $.postFormData({"method":"startQuestionnaire", "params":{"user_activity_id": user_activity_id}}, function(resp) {
           if(!resp.has_errors) {
              $.getRenderedForm("assessment_form", callback);
           }
      });
   },
   startPlan: function(plan_id, callback1, callback2, callback3) {
      $.postFormData({"method":"startPlan", "params": {"plan_id": plan_id}}, function(resp) {
           if(!resp.has_errors && resp.show_immediately) {
              if (callback3) callback3();
              if (callback1) $.getAssessmentData(callback1);
           } else {
              if (callback2) callback2();
           }
      });
   },
   getAssessmentData: function(callback) {
      $.postFormData({"method": "getAssessmentData", "params": null}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback(resp.questionnaire);
           }
      });  
   },
   getAssessmentResult: function(callback) {
	  $.postFormData({"method": "getAssessmentResult", "params": null}, function(resp) {
	      if(!resp.has_errors) {
	          if (callback) callback(resp.result_description);
	      }
	  });  
   },
   startPreAssessment: function(assessment_id, menu_id, callback, callback2) { 
      if (callback2) callback2();
      $.postFormData({"method":"startPreAssessment", "params": {"assessment_id": assessment_id, "menu_id": menu_id}}, function(resp) {
          if(!resp.has_errors) {
             $.getRenderedForm("assessment_form", callback);
          }
      });
   },
   abandonPlan: function(plan_id) {
      $.postFormData({"method": "abandonPlan", "params": {"plan_id": plan_id}}, function(resp) {
           if(!resp.has_errors) {
              window.location.reload();
           }
      });  
   },
   cancelSubscription: function(subscription_id, callback) {
      $.postFormData({"method": "cancelSubscription", "params": {"subscription_id": subscription_id}}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback();
           }
      });  
   },
   cancelPreOrder: function(pre_order_id, callback) {
      $.postFormData({"method": "cancelPreOrder", "params": {"pre_order_id": pre_order_id}}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback();
           }
      });  
   },
   requestRefund: function(subscription_id, callback) {
      $.postFormData({"method": "requestRefund", "params": {"subscription_id": subscription_id}}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback();
           }
      });  
   },
   autoRenewal: function(subscription_id, auto_renewal, callback) {
      $.postFormData({"method": "autoRenewal", "params": {"auto_renewal": auto_renewal, "subscription_id": subscription_id}}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback();
           }
      });  
   },
   totalTodayAndOverdueActivities: function(callback) {
      $.postFormData({"method": "totalTodayAndOverdueActivities", "params": null}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback(resp.overdue_total, resp.today_total);
           }
      });  
   },
   renewNow: function(subscription_id, callback) {
      $.postFormData({"method": "renewNow", "params": {"subscription_id": subscription_id}}, function(resp) {
           if(!resp.has_errors) {
              if (callback) callback();
           }
      });
   }
});

jQuery.fn.extend({
    twitterButton: function() {
       $(this).live('click', function() {
            if (!Twitter.success) Twitter.startTwitterConnect();
            else $(this).trigger('onTwitterDisconnect');
       }).live('onTwitterConnected', function() {
            var self = this
            $.connectToTwitter(true, function() {
                $("span", self).html("<i></i> Disconnect");
            });
       }).live('onTwitterDisconnect', function() {
            var self = this
            $.connectToTwitter(false, function() {
                Twitter.success = false;
                $("span", self).html("<i></i> Connect");
            });
       })
    } 
});

var Twitter = new function() {
        var that = this
        var success = false
        this.startTwitterConnect = function() {
            var popupParams = 'location=0,status=0,width=1024,height=768';
            that._twitterWindow = window.open('/twitter/auth/', 'twitterWindow', popupParams);
            that._twitterInterval = window.setInterval(that.completeTwitterConnect, 1000);
        },
        this.completeTwitterConnect = function() {
             if (that._twitterWindow.closed) {
                 window.clearInterval(that._twitterInterval);
                 if (that.success) {
                    $(".twitter_connect").trigger('onTwitterConnected');
                 }
             }
        }
}

