// CHECKNAV
//$(function() {
//	$('#myAccountTabs > ul').tabs({ fx: { opacity: 'toggle' } });
//});

var PAPER = 'TCED';
if (window.location.href.match('/philanthropy.com/')) PAPER = 'PHLT';

// CREDENTIALS
var VIEWS = ['view', 'login', 'forgotpassword', 'updatepassword', 'forgotusername', 'updateusername'];

var clicks = 0;

var hideViews = function () {
	var hide = 'visibility:hidden; display:none; height:0px;';
	for (var x in VIEWS) {
		if (document.getElementById(VIEWS[x])) {
			document.getElementById(VIEWS[x]).setAttribute('style', hide);
		}
	}
}

var hideMA = function(e) {
	$("#" + e).css({'visibility' : 'hidden', 'display' : 'none', 'height' : '0px'});
}

var showMA = function(e) {
	$("#" + e).css({'visibility' : 'visible', 'display' : 'inline', 'height' : 'auto'});
}
var shEditEmail = function(mode)
{
	if (mode){
		showMA('editEmail');
		hideMA('viewEmail');
	}else{
		showMA('viewEmail');
		hideMA('editEmail');
	}
}

var getViewMA = function (view, hideall) {
	if (!view) { return void(0); }	
	if (!hideall) hideViews();	
	if (typeof(view) == 'object') {		
		for (var y in view) {
			if (typeof(view[y]) == 'string') { getView(view[y], true); }
		}
		return;
	}
	var show = 'visibility:visible; display:normal; height:auto;';	
	for (var x in VIEWS) {
		if (document.getElementById(VIEWS[x])) {
			if (view == VIEWS[x]) {
				document.getElementById(VIEWS[x]).setAttribute('style', show);
			}
		}
	}
}

function validateMA(f, form, quiet, return_error_ct)	{
	if (typeof(form) == 'string')
	{
		if (document.forms[form]) form = document.forms[form];
		else { validError(2, 'form'); return false; } 
	}
	
	if (typeof(form) != 'object') {
		validError(2, 'form'); return false; 
	}	
	
	//clearErrors(form);
	var v = true;
	var error_ct = 0;
		
	switch(f)	{
		case 'fp':
			if (!validateMA('email', form, true)) {
				v = false;
			}
			break;
		case 'login':
			form.username.value = jQuery.trim(form.username.value);
			form.password.value = jQuery.trim(form.password.value);	
			if (form.username.value.length == 0) {
				validError(99, 'User name', null, 'E-mail address or user name is required.', form.username);
				v = false;
			}
			if (form.password.value.length == 0) {
				validError(1, 'Password', null, null, form.password);
				v = false;
			}	
			break;
		case 'captcha':
			if ($("#recaptcha_response_field") != undefined) {			
				if ($("#recaptcha_response_field").val() == '')	{
					validError(1, 'Image verification', null, null, form.recaptcha_response_field);
					error_ct++; v = false; 
				}
			}
			break;
		case 'email':
			if (form.email != undefined) {
				form.email.value = jQuery.trim(form.email.value);			
				if (form.email.value == '') {
					validError(1, 'E-mail address', null, null, form.email);
					v = false;
					error_ct++;
				}
				if (!isValidEmail(form.email.value)) {
					validError(2, 'e-mail address', null, null, form.email);
					v = false;
					error_ct++;
				}
			}
			if (form.confirmemail != undefined) {
				form.confirmemail.value = jQuery.trim(form.confirmemail.value);
				if (form.confirmemail.value == '') {
					validError(1, 'Confirm e-mail address', null, null, form.confirmemail);
					v = false;
					error_ct++;
				}		
				if (form.email.value != form.confirmemail.value) {
					validError(3, 'E-mail addresses', null, null, form.confirmemail);
					v = false;
					error_ct++;
				}
			}
			if (!v && !quiet) validError(4, null, error_ct, null, null);
			break;
		case 'firstname':
			if(form.firstname.value == '') {
				validError(1, 'First name', null, null, form.firstname);
				v = false;
			}
			break
		case 'lastname':
			if(form.lastname.value == '') {
				validError(1, 'Last name', null, null, form.lastname);
				v = false;
			}
			break;
		case 'username':	
			var fields = ['username', 'currentusername', 'newusername', 'confirmusername'];
			var field_labels = ['User name', 'Current user name', 'New user name', 'Confirm user name'];
			
			var username_required = 'User name is required.';
			var username_invalid = 'E-mail address or user name is required.';
			
			for(var x in fields) {			
				if (form[fields[x]]) {
					form[fields[x]].value = jQuery.trim(form[fields[x]].value);	
					switch (form.id) {
						case 'registrationFormStep2':
							username_required = 'User name is required.';
							username_invalid = null;
							break;
						case 'loginForm':
							username_required = 'E-mail address or user name is required.';
							username_invalid = 'Please enter a valid e-mail address or user name.';
							break;
						case 'changeUsernameForm':
							username_required = field_labels[x]+' is required.';
							username_invalid = null;
							break;
					}					
					if (form[fields[x]].value == '') {
						validError(1, field_labels[x], null, username_required, form[fields[x]]);
						error_ct++;
						v = false;
						continue;
					}
					if (!isValidUsername(form[fields[x]].value) && !isValidEmail(form[fields[x]].value)) {
						validError(2, field_labels[x].toLowerCase(), null, username_invalid, form[fields[x]]);
						error_ct++;
						v = false;
						continue;
					}			
				}
			}
			if (v && form.confirmusername) {					
				var un = null;
				if (form.username) { un = form.username.value; }
				else if (form.newusername) { un = form.newusername.value; }
				if (un != form.confirmusername.value) {
					form.confirmusername.value = '';
					if (!quiet) validError(3, 'user names', null, null, form.confirmusername);
					v = false;
					error_ct++;
				}
			}
		
			if (!v && !quiet) validError(4, null, error_ct);
			break;
		case 'password':
			var fields = ['password', 'currentpassword', 'newpassword', 'confirmpassword'];
			var field_labels = ['Password', 'Current password', 'Password', 'Confirm password'];
			for(var x in fields)
			{				
				if (form[fields[x]])
				{
					form[fields[x]].value = jQuery.trim(form[fields[x]].value);	
					if (form[fields[x]].value == '')
					{
						validError(1, field_labels[x], null, null, form[fields[x]]);
						v = false;
						error_ct++;
						continue;
					}
					else if (!isValidPassword(form[fields[x]].value))
					{
						validError(2, field_labels[x].toLowerCase(), null, null, form[fields[x]]);
						v = false;
						error_ct++;
						continue;
					}			
				}
			}
			if (form.confirmpassword)	
			{		
				var pw = null;
				if (form.password) { pw = form.password.value; }
				else if (form.newpassword) { pw = form.newpassword.value; }
				if (pw != form.confirmpassword.value)
				{
					form.confirmpassword.value = '';
					validError(3, 'passwords', null, null, form.confirmpassword);
					v = false;
					error_ct++;
				}
			}
			if (!v && !quiet) validError(4, null, error_ct);
			break;
		case 'profile':
			if (!validateMA('email', form)) { error_ct++; v = false; }
			if (!validateMA('firstname', form)) { error_ct++; v = false; }
			if (!validateMA('lastname', form)) { error_ct++; v = false; }
			if (!validateMA('birthyear', form)) { error_ct++; v = false; }
			if ($('select#country')) 
			{
				if (validateMA('country', form))
				{
					if ($('select#country :selected').text() == 'United States')
					{
						if(!validateMA('zip', form)) { error_ct++; v = false; }
					}
				}
				else { error_ct++; v = false; }
			}
			
			if (PAPER == 'PHLT') if (!validateMA('primaryjob', form)) { error_ct++; v = false; }
			if (PAPER == 'TCED') if (!validateMA('role', form)) { error_ct++; v = false; }
			
						//little hack, password validation can return multiple errors
			if ($('fieldset.email').find('.form-error-msg').length > 0)
			{
				if ($('fieldset.confirm-email').find('.form-error-msg').length > 0)
				{
					error_ct++;
				}
			}
			window.location.href="#top";			
			if (!v) validError(4, null, error_ct);
			break;
		case 'updateprofile':			
			if (!validateMA('firstname', form)) { error_ct++; v = false; }
			if (!validateMA('lastname', form)) { error_ct++; v = false; }
			if (!validateMA('birthyear', form)) { error_ct++; v = false; }
			if ($('select#country')) 
			{
				if (validateMA('country', form))
				{
					if ($('select#country :selected').text() == 'United States')
					{
						if(!validateMA('zip', form)) { error_ct++; v = false; }
					}
				}
				else { error_ct++; v = false; }
			}
			if ($(document).find("#req_fields").length > 0)
			{
				var req_fields = $("#req_fields").val().split(',');
				for (var x in req_fields)
				{
					switch(req_fields[x])
					{
						case 'institution':
						case 'enrollment':
						case 'role':
							if ($(document).find("#"+req_fields[x]).length > 0)
							{
								if (!validateMA(req_fields[x], form)) { error_ct++; v = false; }
							}
							break;
						case 'concentration':
							if ($(document).find("input[id|="+req_fields[x]+"_]").length > 0)
							{
								if (!validateMA(req_fields[x], form)) { error_ct++; v = false; }
							}
							break;
					}
				}
			}				
			
			if (!v)
			{
				window.location.href="#top";
				validError(4, null, error_ct);
			}
			break;
		case 'terms':			
			if (form.terms.checked != true) { validError(99, null, null,'Agreeing to the terms of service is required.', form.terms); v = false; }
			break;
		case 'country':
			if (form.country.value == "") { validError(1, 'Country', null, null, form.country); v = false; }
			break;
		case 'zip':			
			if (form.zip.value == "") { validError(1, 'Zip code', null, null, form.zip); v = false; }
			else if (!form.zip.value.match(/^[0-9]{5}$/i)) { validError(2, 'zip code', null, null, form.zip); v = false; }				
			break;
		case 'birthyear':
			if (form.birthyear.value == "") { validError(1, 'Birth year', null, null, form.birthyear); v = false; }
			else if (!form.birthyear.value.match(/^[0-9]{4}$/i)) { validError(2, 'Birth year', null, null, form.birthyear); v = false; }				
			break;		
		case 'institution':
			if (form.institution.value == "") { validError(1, 'Institution', null, form.institution); v = false; }
			break;
		case 'enrollment':
			if (form.enrollment.value == "") { validError(1, 'Enrollment', null, null, form.enrollment); v = false; }
			break;
		case 'role':
			if (form.role.value == "") { validError(1, 'Position or role', null, null, form.role); v = false; }
			break;
		case 'concentration':
			var sel_concs = 0;
			if ($(document).find("input[id|=concentration_]").length > 0)
			{
				$(document).find("input[id|=concentration_][checked]").each(function(){		
					sel_concs++;
				});
				if (sel_concs == 0) { validError(1, 'Concentration', null, form.concentration_1); v = false; }
			}
			break;
		case 'register_step1':
			error_ct += validateMA('email', form, true, true);
			error_ct += validateMA('captcha', form, true, true);
			if (error_ct > 0) v = false;			
			if (!v) validError(4, null, error_ct);
			break;
		case 'register_step2':
			if (!validateMA('firstname', form)) { error_ct++; v = false; }
			if (!validateMA('lastname', form)) { error_ct++; v = false; }
			if (!validateMA('birthyear', form)) { error_ct++; v = false; }
			if (!validateMA('username', form)) { error_ct++; v = false; }
			if (!validateMA('password', form)) { error_ct++; v = false; }
			
			//little hack, password validation can return multiple errors
			if ($('fieldset.password').find('.form-error-msg').length > 0)
			{
				if ($('fieldset.confirm-password').find('.form-error-msg').length > 0)
				{
					error_ct++;
				}
			}
			
			if ($(document).find('select#country').length > 0) 
			{
				if (validateMA('country', form))
				{
					if ($('select#country :selected').text() == 'United States')
					{
						if(!validateMA('zip', form)) { error_ct++; v = false; }
					}
				}
				else { error_ct++; v = false; }
			}			
			if ($(document).find('select#primaryjob').length > 0) if (!validateMA('primaryjob', form)) { error_ct++; v = false; }
			if ($(document).find('select#role').length > 0) if (!validateMA('role', form)) { error_ct++; v = false; }			
			if (!validateMA('terms', form)) { error_ct++; v = false; }			
			if (!v)
			{
				window.location.href="#top";
				validError(4, null, error_ct);
			}
			break;
		case 'verify':			
			break;
	}
	if (return_error_ct === true) return error_ct;
	return v;	
}
var isValidUsername = function (username) {
	var re = /^\S{5,20}/i;
	if (username == undefined || !username.match(re)) return false;
	return true;
}
var isValidEmail = function (email) {
	var re = /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i;
	if (email == undefined || !email.match(re)) return false;
	return true;
}
var isValidPassword = function (password) {
	/* min 6 characters, 1 num, 1 caps	*/
	/*var re = /^(?=\S*?[A-Z])(?=\S*?[a-z])(?=\S*?[0-9])\S{6,}$/i;*/
	var re = /^[^ \t\n]{5,}$/;
	if (password == undefined || !password.match(re)) return false;
	return true;
}
var validError = function(type, field_name, error_ct, custom_message, e) {
	var m, sm=false, f;
	
	switch (type)	{
		case 1://missing required param
			m = field_name+' is required.';
			break;
		case 2://invalid
			m = 'Please enter a valid '+field_name+'.';
			if (custom_message) m += ' '+custom_message;
			break;
		case 3://do not match			
			m = ucFirst(field_name)+' must match.';
			if (custom_message) m += ' '+custom_message;
			break;
		case 4://num errors			
			m = 'Please correct the '+custom_message;
			m += (custom_message == 1) ? ' error ' : ' errors ';
			m += 'indicated below.';
			break;
		case 99://custom, do not use
		default: m = custom_message; break;			
	}

	if (e != undefined)
	{
		var error_span = '<span class="form-error-msg">'+m+'</span>';
		var id = e.getAttribute("id");
		$("#"+id).addClass("form-error");

		if (id == 'zip')
		{
			if ($("#zip-form-error-msg").length == 0)
			{
				$("div.zip-tip").after('<br /><div id="zip-form-error-msg" class="form-error-msg">'+m+'</div>');
			}
		}
		else if (id == 'birthyear')
		{
			if ($("a.why-required").parent().find('.form-error-msg').length == 0)
			{
				$("a.why-required").after('<br />'+error_span);
			}
		}
		else if (id == 'terms')
		{
			if ($("label[for='terms']").parent().find('.form-error-msg').length == 0)
			{
				$("label[for='terms']").after('<br />'+error_span);
			}
		}
		else if (id.match(/concentration_?/))
		{
			if ($("fieldset.concentration").find('.form-error-msg').length == 0)
			{
				$("fieldset.concentration h3").after(error_span);
				$(document).find("input[id|=concentration_]").change(function(){
					$("fieldset.concentration").find('.form-error-msg').remove();
					$(document).find("input[id|=concentration_]").each(function(){
						$(this).unbind('change');
					});
				});
			}
		}
		else
		{
			if ($("#"+id).parent().find('.form-error-msg').length == 0)
			{
				$("#"+id).after(error_span);
			}
		}
				
		if (id == 'birthyear')
		{
			$("#"+id).focus(function(){
				$(this).removeClass("form-error");
				$(this).parent().parent().find('.form-error-msg').remove();
				$(this).unbind('focus');
			});
		}
		else
		{
			$("#"+id).focus(function(){
				$(this).removeClass("form-error");
				$(this).parent().find('.form-error-msg').remove();
				$(this).unbind('focus');
			});
		}
	}
}

function clearErrors(f)
{
	id = f.getAttribute("id");
	if (id.length > 0)
	{
		$("#"+id).find(".form-error").each(function(){
			$(this).removeClass("form-error");
		});
		$("#"+id).find("span.form-error-msg").each(function(){
			$(this).remove();
		});
		return true;
	}
	return false;
}

function saveMyaccount(type)
{
	var form, formname, action = 'save', fields, valid = false, demo = [], data = '', d = '', url = "/myaccount/";
	switch (type)
	{		
		case 'profile':
			formname = 'profileDetailsForm';
			if (validateMA(type, formname))
			{
				fields = ['prefix', 'firstname', 'middlename', 'lastname', 'email', 'confirmemail', 'save'];				
				demo = saveMyaccountAddDemo(fields, data, formname);
				fields = demo['fields'];
				data = demo['data'];				
				valid = true;
			}
			break;
		case 'updateprofile':
			formname = 'profileDetailsForm';
			if (validateMA(type, formname))
			{
				fields = ['uptoken', 'prefix', 'firstname', 'middlename', 'lastname', 'email', 'save', 'req_fields'];				
				url = "/updateProfile/";				
				demo = saveMyaccountAddDemo(fields, data, formname);
				fields = demo['fields'];
				data = demo['data'];				
				valid = true;
			}
			break;		
		case 'changeusername':	
			formname = 'changeUsernameForm';		
			if (valid = validateMA('username', formname))
			{				
				fields = ['currentusername', 'newusername', 'confirmusername', 'save'];	
			}
			break;
		case 'changepassword':
			formname = 'changePasswordForm';
			if (valid = validateMA('password', formname))
			{
				fields = ['currentpassword', 'newpassword', 'confirmpassword', 'save'];
			}
			break;
		case 'verify_demo':
			formname = 'verifyForm';
			//no fields are currently required, so no validation required
			fields = ['save', 'confirmed', 'vcode'];				
			demo = saveMyaccountAddDemo(fields, data, formname, type);
			fields = demo['fields'];
			data = demo['data'];				
			valid = true;
			action = type;
			break;
	}
	

	if (valid && fields.length)
	{
		var saving = '<p class="message" style="text-decoration: blink;">Saving...</p>';
		window.location.href="#top";
		$('#system-message').html(saving);
		$('#system-message').show();
		for (var x in fields){		
			data += '&'+fields[x]+'='+encodeURIComponent(document.forms[formname][fields[x]].value);
		}	
		$.ajax({
			type: "POST",
		   	url: url,
		   	data: 'ajax=true&action='+action+data,
		   	success: function(msg){
				$('#system-message').html('');
				$('#system-message').hide();
		   		eval(msg);	
		   		if (response.status == 'ok') {
		   			var m = '<p class="message">'+mod_unescape(response.message)+'</p>';
		   		} else if (response.status == 'confirmemail') {
		   			var m = '<p class="message">'+mod_unescape(response.message)+'</p>';
					if (response.data) {
						showEmailConfirmModal(response.data);
					}
				}
		   		else {
		   			var m = '<p class="error">'+mod_unescape(response.message)+'</p>';
		   		}   		
				
	  			switch(type) {
					case 'profile':
						if (response.status != 'confirmemail-error') {
							shEditEmail();
						}
						if($("select#country :selected").text() != 'United States'){
							$("input#zip2").val('');
						}
						$('#system-message').html(m);
						$('#system-message').show();
						break;
					case 'changeusername':
						var mbox = 'updateusername';
						if (response.status == 'ok'){
							mbox = 'currentcreds';
							shCreds('current');
						}
						$("#"+mbox+" #system-message").html(m);
						$("#"+mbox+" #system-message").show();
						break;
					case 'changepassword':
						var mbox = 'updatepassword';
						if (response.status == 'ok'){
							mbox = 'currentcreds';
							shCreds('current');
						}
						$("#"+mbox+" #system-message").html(m);
						$("#"+mbox+" #system-message").show();
						break;
					case 'verify_demo':
						if (response.status == 'ok'){
							window.location.href = '/myaccount/verify/complete';
						}
						else
						{
							window.location.href = '/myaccount/verify/error';
						}						
						break;
					default:
						$('#system-message').html(m);
						$('#system-message').show();
						break;
				}
		   	}
		});	
	}
}

function saveMyaccountAddDemo(fields, data, formname, type)
{
	var demo = [];

	if (!type || type == undefined)
	{
		fields.push('institution', 'enrollment', 'role', 'country', 'zip', 'birthyear', 'is_us');
		d = 'concentration[]';
	}
	else
	{
		switch (type)
		{
			case 'verify_demo':
				fields.push('institution', 'enrollment');
				d = 'concentration[]';
				break;
		}
	}
	
	demo['fields'] = fields;

	var d_ele = document.forms[formname][d]; 
	for (var y in d_ele)
	{
		if (d_ele[y].checked) 
		{
			data += '&'+escape(d)+'='+escape(d_ele[y].value);
		}
	}
	
	demo['data'] = data;
	
	return demo;
}


var deleteActivity = function(id)
{
	if (id)
	{
		$.ajax({
			type: "POST",
		   	url: "/myaccount/",
		   	data: 'ajax=true&action=delete&delete=activity&id='+id,
		   	success: function(msg){
		   		eval(msg);	
		   		//if activity update is successful, page will be reloaded.
		   		var cls = "message";
		   		if (response.status != 'ok') cls = "error";		   					   		
		   		var m = '<p class="'+cls+'">'+mod_unescape(response.message)+'</p>';		   				   		
		   		$('#system-message').html(m);
		   		window.location.href = '/myaccount/activitylog';
		   		 
		   	}
		});
	}
}

updateZip = function()
{
	if ($('fieldset.zip') && $('select#country'))
	{
		if ($('select#country :selected').val() == 212 || $('select#country :selected').text() == 'United States') $('fieldset.zip').show();
		else $('fieldset.zip').hide();
	}
}

var zipRequired = function()
{
	if ($("select#country :selected").text() == "United States")
	{
		var z = $("input#zip2").val();
		if (z.length) $("input#zip").val(z);
		$("fieldset.zip").show();
		$("#is_us").val(true);		
	}
	else
	{
		var z = $("input#zip").val();
		if (z.length) $("input#zip2").val(z);
		$("input#zip").val('');
		$("fieldset.zip").hide();
		$("#is_us").val(false);
	}
}

var oneClick = function()							
{
	clicks++;
	if(clicks > 1) { return false; }
	return true;				
}

var ucFirst = function(str)
{
	str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1);
}

// set google optimize variation
var setRequired = function()
{
	if ($(document).find("#req_fields").length > 0)
	{
		var req_fields = $("#req_fields").val().split(',');
		for (var x in req_fields)
		{
			switch(req_fields[x])
			{
				case 'institution':
				case 'enrollment':
				case 'role':
					if ($(document).find("fieldset."+req_fields[x]+" label").length > 0)
					{
						$(document).find("fieldset."+req_fields[x]+" label").each(function(){
							var lab = $(this).html();
							$(this).html('<span class="required">*</span> '+lab);
						});						
					}
					break;
				case 'concentration':
					if ($(document).find("fieldset."+req_fields[x]+" h3").length > 0)
					{
						$(document).find("fieldset."+req_fields[x]+" h3").each(function(){
							var lab = $(this).html();
							$(this).html('<span class="required">*</span> '+lab);
						});						
					}
					break;
			}
		}
	}
}

