var vBAJAX;

jQuery(document).ready(function() {

	jQuery('#user_pass_text').focus(function() {
		if (!jQuery(this).hasClass('hide'))
			jQuery(this).addClass('hide');
			
		jQuery('#user_pass').removeClass('hide');
		jQuery('#user_pass').focus();
	});

	jQuery('#user_pass').focus(function() {
		jQuery('#user_pass_text').removeClass('focus');
	});
	
	jQuery('#user_pass').blur(function() {
		if (jQuery(this).val() == '') {
			if (!jQuery(this).hasClass('hide'))
				jQuery(this).addClass('hide');
				
			jQuery('#user_pass_text').removeClass('hide');
		}
		jQuery('#user_pass_text').removeClass('focus');
	});

	jQuery('#wp-submit').click(function() {
		jQuery('#user_login').removeClass('required');
		if (jQuery('#user_login').val() == '' || jQuery('#user_login').val() == 'Username')	{
			jQuery('#user_login').addClass('required');
			return false;
		}
	});
	
	jQuery('#signup_link').click(function() {
		jQuery('#register-result').html('');
		jQuery('.register-form').slideToggle(300);
	});

	jQuery('#subscribe_reg_link').click(function() {
		jQuery('#register-result').html('');
		jQuery('.register-form').slideDown(300);
	});

	jQuery('#register_submit').click(function() {
		//ajax_register();
		return beforeRegister();
	});

	jQuery('#loginbar').find('.inputtxt').each(function() {
		jQuery(this).focus(function() {
			jQuery(this).addClass('focus');
		});

		jQuery(this).blur(function() {
			if (jQuery(this).val() != '') {
				jQuery(this).removeClass('required');
			}
			jQuery(this).removeClass('focus');
		});
	});

	//navigation
	var topNav = new Array();
	jQuery('#nav li').each(function() {
		if (jQuery(this).parent().attr('id') == 'nav') {
			topNav.push(jQuery(this));
		}
	});

	if (topNav.length) {
		for (var i=0; i<topNav.length; i++) {
			if (i > 0) {
				if (!topNav[i-1].hasClass('current_page_item'))
				{
					topNav[i].addClass('navli');
				}
			}
		}
	}

});

function ajaxDailyCalendar(data) {
	fetch_object('hpTabLast').innerHTML = vBAJAX.fetch_data(fetch_tags(data, 'excal')[0]);
}

function ajax_register() {
	if (beforeRegister()) {
		ajaxBeforeRegister();

		jQuery.ajax({
			type: 'POST', 
			url: ajax_register_url, 
			data: 'ajax_register=1&register_user=' + jQuery('#username').val() + '&register_password=' + jQuery('#password').val() + '&register_email=' + jQuery('#email').val() + '&register_first_name=' + jQuery('#firstname').val() + '&register_last_name=' + jQuery('#lastname').val() + '&register_company=' + jQuery('#company').val(), 
			cache: false, 
			success: ajaxRegisterProcess
		});
	}
}

function beforeRegister() {

	jQuery('#register-result').html('');
	var flag = true;
	jQuery('#register_box').find('.inputtxt').each(function() {
		jQuery(this).removeClass('required');
	});

	if (jQuery('.product').length > 1) {
		var membership = false;
		jQuery('.product').each(function() {
			if (jQuery(this).attr('checked') == true) {
				membership = true;
			}
		});

		if (!membership) {
			jQuery('#register-result').append('<p class="error">ERROR: Please select your membership.</p>');
			flag = false;
		}
	}

	if (jQuery('#firstname').val() == '') {
		jQuery('#firstname').addClass('required');
		jQuery('#register-result').append('<p class="error">ERROR: Please enter your firstname.</p>');
		flag = false;
	}

	if (jQuery('#lastname').val() == '') {
		jQuery('#lastname').addClass('required');
		jQuery('#register-result').append('<p class="error">ERROR: Please enter your lastname.</p>');
		flag = false;
	}

	if (jQuery('#email').val() == '') {
		jQuery('#email').addClass('required');
		jQuery('#register-result').append('<p class="error">ERROR: Please enter a valid email address.</p>');
		flag = false;
	} else {
		if (!validateEmail(jQuery('#email').val())) {
			jQuery('#email').addClass('required');
			jQuery('#register-result').append('<p class="error">ERROR: Please enter a valid email address.</p>');
			flag = false;
		}
	}

	if (jQuery('#username').val() == '') {
		jQuery('#username').addClass('required');
		jQuery('#register-result').append('<p class="error">ERROR: Please enter a valid username.</p>');
		flag = false;
	} else {
		if (!validateUsername(jQuery('#username').val())) {
			jQuery('#username').addClass('required');
			jQuery('#register-result').append('<p class="error">ERROR: You must input valid username 3 characters or longer.</p>');
			flag = false;
		}
	}

	if (jQuery('#password').val() == '') {
		jQuery('#password').addClass('required');
		jQuery('#register-result').append('<p class="error">ERROR: Please enter a valid password.</p>');
		flag = false;
	} else {
		var pw_options = {length: [6, 50], alpha: 1, numeric: 0}

		if (!validatePassword(jQuery('#password').val(), pw_options)) {
			jQuery('#password').addClass('required');
			jQuery('#register-result').append('<p class="error">ERROR: Your password must be at least 6 characters long.</p>');
			flag = false;
		} else {
			if (jQuery('#password_confirm').val() == '') {
				jQuery('#password_confirm').addClass('required');
				jQuery('#register-result').append('<p class="error">ERROR: The passwords you entered do not match.</p>');
				flag = false;
			} else {
				if (jQuery('#password').val() != jQuery('#password_confirm').val()) {
					jQuery('#password_confirm').addClass('required');
					jQuery('#register-result').append('<p class="error">ERROR: The passwords you entered do not match.</p>');
					flag = false;
				}
			}
		}
	}
	
	if (!flag) {
		return false;
	}

	return true;
}

function ajaxBeforeRegister() {
	jQuery('#register-result').html('');
	jQuery('#register-loading > img').removeClass('hide');
}

function ajaxRegisterProcess(data) {
	var result = data.split('^');
	if (result[0] == '0') {
		jQuery('#register-loading > img').addClass('hide');
		jQuery('#register-result').html(result[1]);
	} else {
		jQuery('#register-loading > img').addClass('hide');
		jQuery('#register-result').html('<p class="updated">Thank you for registering with ForexPlaybook.com. A confirmation link has been sent to the email address you provided. Please click through the link to complete the registration process.</p>');
	}
	
}

function validateUsername(str) {
	var alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	
	if (alphabet.indexOf(str.charAt(0)) == -1) {
		return false;
	} else {
		if (str.length < 3)
			return false;
	}
	
	return true;
}

function validateEmail(str) {
	var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	if(str.match(emailExp)){
		return true;
	}

	return false;
}

function validatePassword (pw, options) {
	// default options (allows any password)
	var o = {
		lower:    0,
		upper:    0,
		alpha:    0, /* lower + upper */
		numeric:  0,
		special:  0,
		length:   [0, Infinity],
		custom:   [ /* regexes and/or functions */ ],
		badWords: [],
		badSequenceLength: 0,
		noQwertySequences: false,
		noSequential:      false
	};

	for (var property in options)
		o[property] = options[property];

	var	re = {
			lower:   /[a-z]/g,
			upper:   /[A-Z]/g,
			alpha:   /[A-Z]/gi,
			numeric: /[0-9]/g,
			special: /[\W_]/g
		},
		rule, i;

	// enforce min/max length
	if (pw.length < o.length[0] || pw.length > o.length[1])
		return false;

	// enforce lower/upper/alpha/numeric/special rules
	for (rule in re) {
		if ((pw.match(re[rule]) || []).length < o[rule])
			return false;
	}

	// enforce word ban (case insensitive)
	for (i = 0; i < o.badWords.length; i++) {
		if (pw.toLowerCase().indexOf(o.badWords[i].toLowerCase()) > -1)
			return false;
	}

	// enforce the no sequential, identical characters rule
	if (o.noSequential && /([\S\s])\1/.test(pw))
		return false;

	// enforce alphanumeric/qwerty sequence ban rules
	if (o.badSequenceLength) {
		var	lower   = "abcdefghijklmnopqrstuvwxyz",
			upper   = lower.toUpperCase(),
			numbers = "0123456789",
			qwerty  = "qwertyuiopasdfghjklzxcvbnm",
			start   = o.badSequenceLength - 1,
			seq     = "_" + pw.slice(0, start);
		for (i = start; i < pw.length; i++) {
			seq = seq.slice(1) + pw.charAt(i);
			if (
				lower.indexOf(seq)   > -1 ||
				upper.indexOf(seq)   > -1 ||
				numbers.indexOf(seq) > -1 ||
				(o.noQwertySequences && qwerty.indexOf(seq) > -1)
			) {
				return false;
			}
		}
	}

	// enforce custom regex/function rules
	for (i = 0; i < o.custom.length; i++) {
		rule = o.custom[i];
		if (rule instanceof RegExp) {
			if (!rule.test(pw))
				return false;
		} else if (rule instanceof Function) {
			if (!rule(pw))
				return false;
		}
	}

	// great success!
	return true;
}