function winHeight() { 
	return document.body.offsetHeight || window.innerHeight || document.documentElement.clientHeight || 0;
}

function revealSignIn() {
	$('signInDiv').style.display = "block";
	$('registerDivCollapsed').style.display = "block";
	$('registerDiv').style.display = "none";
	$('signInDivCollapsed').style.display = "none";
	$('loginForm').style.marginLeft = "-205" + "px";
	$('loginForm').style.width = "428" + "px";
	centerLoginForm();
}

function revealRegister() {
	$('signInDiv').style.display = "none";
	$('registerDivCollapsed').style.display = "none";
	$('loginForm').style.marginLeft = "-360" + "px";
	$('loginForm').style.width = "720" + "px";
	$('registerDiv').style.display = "block";
	$('signInDivCollapsed').style.display = "block";
	centerLoginForm();
}

function centerLoginForm() {
	$('loginForm').style.top = (document.viewport.getScrollOffsets().top + (winHeight() / 2) - ($('loginForm').getHeight() / 2)) + 'px';
}

function showLoginForm() {
	$('loginForm').style.display = "block";
	centerLoginForm();
}

function hideLoginForm() {
	$('loginForm').style.display = "none";
}

function validateEmail(email) {
    return /^([\w]+)(\.[\w]+)*@([\w\-]+)(\.[\w]{2,7})(\.[a-z]{2})?$/i.test(email);
}

function nicknameTest(nickname) {
	return /^[a-z][a-z0-9\-]*$/i.test(nickname);
}

function preValidateRegistration() {
	var errorHTML = "";
	if($('reg_first_name').value == "") {
		errorHTML += "&#8226; Please specify your first name. ";
	}
	
	if($('reg_last_name').value == "") {
		errorHTML += "&#8226; Please specify your last name. ";
	}
	
	if($('reg_email').value == "") {
		errorHTML += "&#8226; Please specify your email. ";
	} else if(validateEmail($('reg_email').value) == false) {
		errorHTML += "&#8226; Please enter a valid email address. ";
	}
	
	if($('reg_verify_email').value == "") {
		errorHTML += "&#8226; Please confirm your email address. ";
	} else if($('reg_email').value != $('reg_verify_email').value) {
		errorHTML += "&#8226; Email address and confirmation email address need to match. ";
	}
	
	var nickname = $('reg_nickname').value;
	if(nickname == "") {
		errorHTML += "&#8226; Please specify a screenname. ";
	} else if(nicknameTest(nickname) == false) {
		errorHTML += "&#8226; Only use letters, numbers, and dashes in your screenname. ";
	}
	
	if($('reg_password').value == "" || $('reg_password').value.length < 6) {
		errorHTML += "&#8226; Please specify a password 6 characters or longer. ";
	}
	
	if($('reg_verify_password').value == "") {
		errorHTML += "&#8226; Please verify your password. ";
	} else if($('reg_password').value != $('reg_verify_password').value) {
		errorHTML += "&#8226; Passwords don't match. ";
		$('reg_password').value = "";
		$('reg_verify_password').value = "";
	}
	
	if($('reg_phone').value == "" || $('reg_phone').value.length < 7) {
		errorHTML += "&#8226; Please specify a valid phone number. ";
	}
	
	if($('reg_phone').value == "") {
		errorHTML += "&#8226; Please specify a phone number. ";
	}
	
	if($('reg_zipcode').value == "" || $('reg_zipcode').value.length < 5) {
		errorHTML += "&#8226; Please specify a valid postal code. ";
	}
	
	if($('reg_referral_source_id').value == 0) {
		errorHTML += "&#8226; Please select an option regarding how you heard about us. ";
	}
	
	if($('reg_agree_terms').checked == false) {
		errorHTML += "&#8226; Please check that you agree to TheSociety.com terms and conditions before proceeding. ";
	}
	
	$('registrationErrors').innerHTML = errorHTML;
	
	if(errorHTML == "") {
		return true;
	} else {
		return false;
	}
}

function preValidateSignIn() {
	var errorHTML = "";
	if(validateEmail($('login_name').value) == false) {
		errorHTML += "&#8226; Please specify a valid email address. ";
	}
	
	if($('login_password').value == "") {
		errorHTML += "&#8226; Please enter your password. ";
	}
	
	$('loginErrors').innerHTML = errorHTML;
	
	if(errorHTML == "") {
		return true;
	} else {
		return false;
	}
}

function getxmlhttpAjax(){
	var xmlhttp = false;
	
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	
	return xmlhttp;
}

function loginRequest() {
	if(preValidateSignIn() == true) {
		$('signInDiv').style.display = "none";
		$('signInDivWait').style.display = "block";
		
		var str = "op=login";
		str += "&login_name=" + $('login_name').value;
		str += "&login_password=" + $('login_password').value;
		
		xmlhttp = getxmlhttpAjax();
		xmlhttp.open("POST", '/components/users/services/loginService.php', true);
		xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				var resultObject = eval('(' + xmlhttp.responseText + ')');
				var errorHTML = "";
				var i;
				if(resultObject.success == false) {
					for (i in resultObject.errors) {
						errorHTML += resultObject.errors[i] + " ";
					}
					if(errorHTML == "") {
						errorHTML = 'An unknown error occured. Please try again or use our registration form <a href="/signup">here</a>. Also feel free to call us anytime toll free at 1.866.789.8222';
					}
					$('loginErrors').innerHTML = errorHTML;
					$('signInDiv').style.display = "block";
					$('signInDivWait').style.display = "none";
				} else {
					hideLoginForm();
					$('signInDiv').style.display = "block";
					$('signInDivWait').style.display = "none";
					currentUserId = resultObject.data.user.id;
					if(inquiryArgs) {
						inquiryArgs.userID = resultObject.data.user.id;
						inquiryArgs.userName = resultObject.data.user.first_name + " " + resultObject.data.user.last_name;
						inquiryArgs.userPhone = resultObject.data.user.phone;
						inquiryArgs.userEmail = resultObject.data.user.email;
						inquiryArgs.userContactPrefID = resultObject.data.user.contact_pref_id;
						inquiryArgs.userBestTimeID = resultObject.data.user.contact_best_time_id;
					}
					runOnLogin();
				}
			}
		}
		xmlhttp.send(str);
	}
}

function registerRequest() {
	if(preValidateRegistration() == true) {
		$('registerDiv').style.display = "none";
		$('registerDivWait').style.display = "block";
		
		var str = "op=register";
		str += "&reg_first_name=" + $('reg_first_name').value;
		str += "&reg_last_name=" + $('reg_last_name').value;
		str += "&reg_email=" + $('reg_email').value;
		str += "&reg_verify_email=" + $('reg_verify_email').value;
		str += "&reg_nickname=" + $('reg_nickname').value;
		str += "&reg_password=" + $('reg_password').value;
		str += "&reg_verify_password=" + $('reg_verify_password').value;
		str += "&reg_phone=" + $('reg_phone').value;
		str += "&reg_country_id=" + $('reg_country_id').value;
		str += "&reg_zipcode=" + $('reg_zipcode').value;
		str += "&reg_contact_pref=" + $('reg_contact_pref').value;
		str += "&reg_best_time=" + $('reg_best_time').value;
		str += "&reg_type_id=" + $('reg_type_id').value;
		str += "&reg_referral_source_id=" + $('reg_referral_source_id').value;
		str += "&reg_emaillist=" + $('reg_emaillist').checked;
		str += "&reg_agree_terms=" + $('reg_agree_terms').checked;
		str += "&membership_type=1";
		
		xmlhttp = getxmlhttpAjax();
		xmlhttp.open("POST", '/components/users/services/loginService.php', true);
		xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				var resultObject = eval('(' + xmlhttp.responseText + ')');
				var errorHTML = "";
				var i;
				if(resultObject.success == false) {
					for (i in resultObject.errors) {
						errorHTML += resultObject.errors[i] + " ";
					}
					if(errorHTML == "") {
						errorHTML = 'An unknown error occured. Please try again or use our registration form <a href="/signup">here</a>. Also feel free to call us anytime toll free at 1.866.789.8222';
					}
					$('registrationErrors').innerHTML = errorHTML;
					$('registerDiv').style.display = "block";
					$('registerDivWait').style.display = "none";
				} else {
					hideLoginForm();
					$('registerDiv').style.display = "block";
					$('registerDivWait').style.display = "none";
					currentUserId = resultObject.data.user.id;
					if(inquiryArgs) {
						inquiryArgs.userID = resultObject.data.user.id;
						inquiryArgs.userName = resultObject.data.user.first_name + " " + resultObject.data.user.last_name;
						inquiryArgs.userPhone = resultObject.data.user.phone;
						inquiryArgs.userEmail = resultObject.data.user.email;
						inquiryArgs.userContactPrefID = resultObject.data.user.contact_pref_id;
						inquiryArgs.userBestTimeID = resultObject.data.user.contact_best_time_id;
					}
					runOnLogin();
				}
			}
		}
		xmlhttp.send(str);
	}
}

function getKeyCode(event) {
	if (navigator.appName.toLowerCase().indexOf("explorer") > 0) {
		event = window.event;
	}
	
	var code;
	if (event.keyCode) {
		code = event.keyCode;
	} else if (event.which) {
		code = event.which;
	}
	
	return code;
}

function registerKeyPress(event) {
	if($('loginForm').style.display == "block") {
		var code = getKeyCode(event);
		
		if(code == 13) {
			registerRequest();
		}
	}
}

function signInKeyPress(event) {
	if($('loginForm').style.display == "block") {
		var code = getKeyCode(event);
		
		if(code == 13) {
			loginRequest();
		}
	}
}

function runOnLogin() {
	if(onLoginObj) {
		if(onLoginObj.func) {
			var evalString = "";
			evalString += onLoginObj.func + '(';
			if(onLoginObj.args) {
        for(var i = 0; i < onLoginObj.args.length; i++) {
					var enclose = "";
					if(typeof(onLoginObj.args[i]) == "string") {
						enclose = "'";
						evalString += enclose + onLoginObj.args[i] + enclose;
					} else if(typeof(onLoginObj.args[i]) == "object") {
						evalString += onLoginObj.args[i].objName;
					} else {
					   evalString += enclose + onLoginObj.args[i] + enclose;
					}
					if(i < onLoginObj.args.length - 1) {
						evalString += ", ";
					}
				}
			}
			evalString += ');';
      eval(evalString);
		}
	}
}

Event.observe(window, 'scroll', function () {
	if(document.getElementById('loginForm').style.display != "none") {
		centerLoginForm();
	}
});
 
Event.observe(window, 'resize', function () {
	if(document.getElementById('loginForm').style.display != "none") {
		centerLoginForm();
	}
});