/*
 *	Hides all MiniReg Fields
 */
function hide_minireg(prefix) {
	//hide everything in the minireg
	$(prefix+'minireg_intro').hide();
	$(prefix+'minireg_enter_email_field').hide();
	$(prefix+'minireg_display_email_field').hide();
	$(prefix+'minireg_display_handle_field').hide();
	$(prefix+'minireg_enter_password_field').hide();
	$(prefix+'minireg_create_handle_field').hide();
	$(prefix+'minireg_create_password_field').hide();
	$(prefix+'minireg_confirm_password_field').hide();
	$(prefix+'minireg_terms_field').hide();
	$(prefix+'minireg_continue_button').hide();
	$(prefix+'minireg_submit_button').hide();
	$(prefix+'minireg_waiting_button').hide();

	//remove error messages
	clearError_minireg(prefix+'minireg_email');
	clearError_minireg(prefix+'mr_password');
	clearError_minireg(prefix+'mr_new_handle');
	clearError_minireg(prefix+'mr_new_password');
	clearError_minireg(prefix+'mr_password2');
	clearError_minireg(prefix+'mr_terms');

	var error_message_id_prefix = prefix+'register_';
	clearErrorMessage(error_message_id_prefix);
}

function clear_minireg(prefix) {
	//reset form values
	$(prefix+'mr_email').value = '';
	$(prefix+'mr_display_handle').innerHTML = '&nbsp;';
	$(prefix+'mr_password').value = '';
	$(prefix+'mr_new_handle').value = '';
	$(prefix+'mr_new_password').value = '';
	$(prefix+'mr_password2').value = '';
	$(prefix+'mr_terms').checked = false;
}

/*
 *	whichButton = register|login
 */
function minireg_show_button(prefix, whichButton) {
	var reg_button = document.getElementById(prefix+'minireg_register_button');
	var login_button = document.getElementById(prefix+'minireg_login_button');

	if(undefined!=reg_button && undefined!=login_button) {
		switch(whichButton) {
			case 'register':
			default:
				$(prefix+'minireg_register_button').show();
				$(prefix+'minireg_login_button').hide();
				break;
			case 'login':
				$(prefix+'minireg_register_button').hide();
				$(prefix+'minireg_login_button').show();
				break;
		}
	}
}

/*
 *	Versions of MiniReg:
 *		0 LOGGEDIN (no need to display MiniReg, only show Submit button)
 *		1 BASE (enter email to determine next Version of MiniReg to show)
 *		2 LOGIN
 *		3 NEWUSER
 *		4 MIGRATE_WITHHANDLE
 *		5 MIGRATE_NOHANDLE
 */
function show_minireg(prefix, state) {
	hide_minireg(prefix);
	switch(state) {
		case 0://LOGGEDIN
			$(prefix+'minireg_submit_button').show();
			minireg_show_button(prefix, 'login');
			clear_minireg(prefix);
			$(prefix+'mr_handle_prevalidated').value = 'true';
			break;
		case 1://BASE
		default:
			$(prefix+'minireg_intro').show();
			$(prefix+'minireg_enter_email_field').show();
			$(prefix+'minireg_continue_button').show();
			minireg_show_button(prefix, 'login');
			minireg_type(prefix, 'none');
			clear_minireg(prefix);
			$(prefix+'mr_handle_prevalidated').value = 'false';
			break;
		case 2://LOGIN
			$(prefix+'minireg_intro').show();
			$(prefix+'minireg_display_email_field').show();
			$(prefix+'minireg_enter_password_field').show();
			$(prefix+'minireg_submit_button').show();
			minireg_show_button(prefix, 'login');
			minireg_type(prefix, 'login');
			$(prefix+'mr_handle_prevalidated').value = 'true';
			break;
		case 3://NEWUSER
			$(prefix+'minireg_intro').show();
			$(prefix+'minireg_display_email_field').show();
			$(prefix+'minireg_create_handle_field').show();
			$(prefix+'minireg_create_password_field').show();
			$(prefix+'minireg_confirm_password_field').show();
			$(prefix+'minireg_terms_field').show();
			$(prefix+'minireg_submit_button').show();
			minireg_show_button(prefix, 'register');
			minireg_type(prefix, 'register');
			$(prefix+'mr_handle_prevalidated').value = 'false';
			break;
		case 4://MIGRATE_WITHHANDLE
			$(prefix+'minireg_intro').show();
			$(prefix+'minireg_display_email_field').show();
			$(prefix+'minireg_display_handle_field').show();
			$(prefix+'minireg_enter_password_field').show();
			$(prefix+'minireg_terms_field').show();
			$(prefix+'minireg_submit_button').show();
			minireg_show_button(prefix, 'register');
			minireg_type(prefix, 'ss_register');
			$(prefix+'mr_handle_prevalidated').value = 'true';
			break;
		case 5://MIGRATE_NOHANDLE
			$(prefix+'minireg_intro').show();
			$(prefix+'minireg_display_email_field').show();
			$(prefix+'minireg_enter_password_field').show();
			$(prefix+'minireg_create_handle_field').show();
			$(prefix+'minireg_terms_field').show();
			$(prefix+'minireg_submit_button').show();
			minireg_show_button(prefix, 'register');
			minireg_type(prefix, 'ss_register');
			$(prefix+'mr_handle_prevalidated').value = 'false';
			break;
	}
}

function minireg_type(prefix, type) {
	$(prefix+'minireg_type').value = type;
}

function minireg_ajax_wait(prefix) {
	$(prefix+'minireg_continue_button').hide();
	$(prefix+'minireg_submit_button').hide();
	$(prefix+'minireg_waiting_button').show();
}

function minireg_continue(prefix) {
	if(undefined==prefix) prefix = '';

	var email = document.getElementById(prefix+"minireg_email").value;

	if(false !== minireg_validate(prefix)) {
		var params = Array();
		var param = Array();
		
		param['name'] = 'email';
		param['value'] = email;
		params[params.length] = param;

		minireg_ajax_wait(prefix);

		var successFunction = function(response) {
			var json = eval('('+response+')');
			var miniregVersion = parseInt(json.state);
			if(undefined!=json.handle) {
				$(prefix+'mr_display_handle').innerHTML = json.handle;
			}

			$(prefix+'mr_email').value = email;

			show_minireg(prefix, miniregVersion);

			//depending on the minireg state, need to set some other fields (display email, display handle)
		}

		executeAjaxFunctionXML('minireg_email', successFunction, params);
	}
}

function minireg_goback(prefix) {
	if(undefined==prefix) prefix = '';
	minireg_ajax_wait(prefix);
	show_minireg(prefix, 1); //BASE state
}

function minireg_validate(prefix) {
	var state = document.getElementById(prefix+'minireg_type').value;
	switch(state) {
		case 'none':
		default:
			//validate enter_email
			if(
				validateRegistrationForm_email(prefix+'minireg_email', null)
			) {
				return true;
			}
			break;
		case 'loggedin':
			return true;
		case 'register':
			//validate display_email, create_handle, create_password, confirm_password, terms
			var valid = validateRegistrationForm_handle(prefix+'mr_new_handle');
			valid = validateRegistrationForm_password(prefix+'mr_new_password', prefix+'mr_password2') && valid; 
			valid = validateRegistrationForm_terms(prefix+'mr_terms') && valid;
			if(valid) {
				return true;
			}
			break;
		case 'ss_register':
			//validate either:
			// display_email, enter_password, display_handle, terms
			// or
			// display_email, enter_password, create_handle, terms
			var validateHandleFunction = function() {return validateRegistrationForm_handle(prefix+'mr_new_handle');};
			if(true==document.getElementById(prefix+'mr_handle_prevalidated').value) {
				validateHandleFunction = function() {return true;};
			}

			var valid = validateRegistrationForm_password(prefix+'mr_new_password', prefix+'mr_password2');
			valid = validateRegistrationForm_terms(prefix+'mr_terms') && valid;
			valid = validateHandleFunction() && valid;

			if(valid) {
				return true;
			}
			break;
		case 'login':
			//validate display_email, enter_password
			if(
				validateRegistrationForm_password(prefix+'mr_password', null)
			) {
				return true;
			}
			break;
	}
	return false;
}

function minireg_validateDiscussAttempt(prefix) {

	minireg_ajax_wait(prefix);

	//validate the minireg
	if(false === minireg_validate(prefix)) {
		//error, minireg not filled out correctly
		$(prefix+'minireg_waiting_button').hide();
		$(prefix+'minireg_submit_button').show();
	} else if(false === validateDiscussAttempt(prefix)) {
		//error, discuss box was empty
		errbox = getElement(prefix+'errorbox');
		if(undefined!=errbox) errbox.style.display = "block";

		errbox = getElement(prefix+'errorbox_space');
		if(undefined!=errbox) errbox.style.display = "block";

		$(prefix+'minireg_waiting_button').hide();
		$(prefix+'minireg_submit_button').show();
	}
}


function minireg_validateAnswerQuestionAttempt(prefix) {

	minireg_ajax_wait(prefix);

	if(false === minireg_validate(prefix)) {
		//error, minireg not filled out correctly
		$(prefix+'minireg_waiting_button').hide();
		$(prefix+'minireg_submit_button').show();
	} else {
		//TODO: check if answer has changed?
		var questionForm = document.getElementById('editanswerform');
		questionForm.submit();
	}
}

function minireg_validateAskQuestionAttempt(prefix) {

	minireg_ajax_wait(prefix);

	var error_message_id_prefix = prefix+'register_';
	if(undefined!=document.getElementById(error_message_id_prefix+'error_message')) {
		clearErrorMessage(error_message_id_prefix);
	}

	var showErrorBox = false;
	moveQuestion();//pulls question from TinyMCE
	var valid = (validateCharacterCount('title', 1, 150) && validateLegalCharacters('title', '<>') && validateCharacterCount('question', 1, -1) && validateCharacterCount('AddCategories', 1, -1));

	if(valid) {
		//validate the minireg forms
		if(minireg_validate(prefix)) {			
			var checkHandle = document.getElementById(prefix+"mr_handle_prevalidated");
			var questionForm = document.getElementById('askquestionform');
			if(undefined!=checkHandle && checkHandle.value=="true") {
				//handle was preverified (already existed)
				questionForm.submit();
				return;
			} else {
				//checkForHandleTaken(prefix+"mr_new_handle", questionForm.submit, handleTaken);
				questionForm.submit();
				return;
			}
		}
	} else {
		if(!validateLegalCharacters('title', '<>')) {
			appendErrorMessage('Angle brackets < and > cannot be used in a question title', error_message_id_prefix);
			showErrorBox = true;
		} else if(!validateCharacterCount('title', 0, 150)) {
			appendErrorMessage('Title must be less than 150 characters', error_message_id_prefix);
			showErrorBox = true;
		} else {
			appendErrorMessage('Please fill in Title, Body and Tags fields', error_message_id_prefix);
			showErrorBox = true;
		}
	}

	if(showErrorBox) {
		errbox = getElement(prefix+'errorbox');
		if(undefined!=errbox) errbox.style.display = "block";

		errbox = getElement(prefix+'errorbox_space');
		if(undefined!=errbox) errbox.style.display = "block";
	} else {
		errbox = getElement(prefix+'errorbox');
		if(undefined!=errbox) errbox.style.display = "none";

		errbox = getElement(prefix+'errorbox_space');
		if(undefined!=errbox) errbox.style.display = "none";
	}

	$(prefix+'minireg_waiting_button').hide();
	$(prefix+'minireg_submit_button').show();

	//Don't remove this.  It clears the error
	//that came from the web service.  We want that
	//error gone when the form is validated again.
	errbox2 = getElement(prefix+'errorbox2');
	if(errbox2 != undefined) errbox2.style.display = "none";
	
	gotoName(prefix+'error');
}


/************************
 * OLD STUFF
 ************************/

function validateRegistrationForm_handle(handle_id) {
	//var error_message_id_prefix = 'register_';
	var errors = false;
	var handle = getElement(handle_id);
	//var handleLabel = getElement(handle_id+'_label');

	//handle too small
	//only validate handle if it was actually editable
	if (handle) {
		if(handle.value.length < 1) {
			setError_minireg(handle_id, "Handle must be at least 1 character");
			errors = true;
		} else if(handle.value.length > 30) { 	//handle too big
			setError_minireg(handle_id, "Handle must be less than 31 characters.");
			errors = true;
		} else if(!validateLegalCharacters(handle_id, '/')) {
			setError_minireg(handle_id, "Handle cannot contain a slash character.");
			errors = true;
		} else if(!checkForLegalCharacters(handle_id, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')) {
			setError_minireg(handle_id, "Handle can only contain the letters A-Z and numbers 0-9.");
			errors = true;
//		} else if(!checkForHandleTaken(handle_id)) {
//			//checkForHandleTaken sets it's own error message
//			errors = true;
		} else {
			clearError_minireg(handle_id);
		}
	}
	return !errors;
}

function validateRegistrationForm_email(email_id, confirm_id) {
	var error_message_id_prefix = 'register_';
	var errors = false;
	var email = getElement(email_id);
	var emailLabel = getElement(email_id+'_label');
	if(null!=confirm_id) {
		var confirmEmail = getElement(confirm_id);
		var confirmLabel = getElement(confirm_id+'_label');
	}

	//no password typed
	if(!validateEmail(email.value)) {
		setError_minireg(email_id, "Please enter your email.");
		errors = true;
	} else {
		clearError_minireg(email_id);
	}

	//password not confirmed
	if(null!=confirm_id) {
		if(email.value != confirmEmail.value || email.value == '') {
			setError_minireg(email_id, "Please type your email twice, correctly.");
			errors = true;
		} else {
			clearError_minireg(email_id);
		}
	}
	return !errors;
}

function setError_minireg(error_id, message) {
	var label = document.getElementById(error_id+"_label");
	var error = document.getElementById(error_id+"_error");
	var arrow = document.getElementById(error_id+"_arrow");

	if(null!=label) {
		label.setAttribute("class", "error");
	}

	if(null!=message) {
		if(null!=error) {
			error.innerHTML = message;
		}
	}
	if(null!=arrow) {
		arrow.src = image_uri+"ajax_error_arrow.gif";
	}
}

function clearError_minireg(error_id) {
	var label = document.getElementById(error_id+"_label");
	var error = document.getElementById(error_id+"_error");
	var arrow = document.getElementById(error_id+"_arrow");

	if(null!=label) {
		label.setAttribute("class", "blue");
	}
	if(null!=error) {
		error.innerHTML = "";
	}
	if(null!=arrow) {
		arrow.src = image_uri+"ajax_reg_arrow.gif";
	}
}

function validateRegistrationForm_password(password_id, confirm_id) {
	var error_message_id_prefix = 'register_';
	var errors = false;
	var password = getElement(password_id);
	var passwordLabel = getElement(password_id+'_label');
	if(null!=confirm_id) {
		var confirmPass = getElement(confirm_id);
		var confirmLabel = getElement(confirm_id+'_label');
	}

	//no password typed
	if(!validatePassword(password.value)) {
		setError_minireg(password_id, "Please enter your password");
		errors = true;
	} else {
		clearError_minireg(password_id);
	}

	//password not confirmed
	if(null!=confirm_id) {
		if(password.value != confirmPass.value || password.value == '') {
			setError_minireg(confirm_id, "Please type your Password twice, correctly.");
			errors = true;
		} else {
			clearError_minireg(confirm_id);
		}
	}
	return !errors;
}

function validateRegistrationForm_terms(term_id) {
	var error_message_id_prefix = 'register_';
	//terms & conditions
	var errors = false;
	var terms = getElement(term_id);
	var termsLabel = getElement(term_id+'_label');
	if(!terms.checked) {
		setError_minireg(term_id, "You must accept the Terms and Conditions");
		errors = true;
	} else {
		clearError_minireg(term_id);
		
	}
	return !errors;
}

function handleTaken(handle_id, handleValue) {
	if(undefined==handleValue) {
		setError_minireg(handle_id, "Handle already taken.");
	} else {
		var handle = document.getElementById(handle_id);
		var currentHandle = handle.value;
		if(currentHandle == handleValue) {
			setError_minireg(handle_id, "Handle '"+handleValue+"' already taken.");
		}
	}

	$(prefix+'minireg_waiting_button').hide();
	$(prefix+'minireg_submit_button').show();
}

function checkForHandleTaken(handle_id, successFunction, failureFunction) {

	if(undefined==successFunction) {
		successFunction =  function() {};
	}

	if(undefined==failureFunction) {
		failureFunction = handleTaken;
	}

	clearError_minireg(handle_id);
	var handle = document.getElementById(handle_id);
	if(undefined!=handle) {
		var handleValue = handle.value;

		params = Array();
		params['ajaxaction'] = 'minireg_checkhandle';
		params['handle'] = handleValue;
		new Ajax.Request('http://'+http_host+'/ajax-manager.php',
		  {
			method:'post',
			parameters: params,
			onSuccess: function (transport) {
				var response = transport.responseText || "error";

				if('free'==response) {
					successFunction();
				} else {
					failureFunction(handle_id, handleValue);
				}
			},
			onFailure: function () { 
				failureFunction(handle_id, handleValue);
			}
		  });//end new Ajax()
	} else {
		//there is no handle...
		alert("Handle not found.");
	}
}

function checkEnter(e){ //e is event object passed from function invocation
	var characterCode; //literal character code will be stored in this variable
	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	}
	else{
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}

	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		return true;
	}
	else{
		return false;
	}
}

function submitForm(e, submitFunction, prefix) {
	if(undefined==prefix) prefix = '';
	if(null==submitFunction) {
		submitFunction = function(prefix) {return true;};
	}
	if(null!=e && undefined!=e) {
		if(checkEnter(e)) {
			submitFunction(prefix);
		}
	}
}

function minireg_forgotPassword_close() {
	minireg_forgotPassword_modalWindow.close();
}

var minireg_forgotPassword_modalWindow = null;
function minireg_forgotPassword(prefix) {
	if(undefined==prefix) prefix = '';
	var minireg_forgotPassword_modalWindow_wait = '<div id="'+prefix+'pleaseWait"></div>';

	var a = document.getElementById(prefix+'pleaseWait_container_container');
	if(undefined!=a) {
		a.innerHTML = '<div id="'+prefix+'pleaseWait_container">'+minireg_forgotPassword_modalWindow_wait+'</div>';
	}

	//sript for opening up modal lightbox
	minireg_forgotPassword_modalWindow = new Control.Modal(prefix+'modal_link', { opacity: 0.5, width: 460, height: 200, fade: false });

	minireg_forgotPassword_modalWindow.open();
	$('modal_container').setStyle({height:'200px'});
	$('modal_container').setStyle({width:'550px'});
	centerModalWindow();

	var email = document.getElementById(prefix+"mr_email").value;

	params = Array();
	params['ajaxaction']	= 'minireg_forgotpassword1';
	params['email']			= email;
	new Ajax.Request('http://'+http_host+'/ajax-manager.php',
	  {
		method:'post',
		parameters: params,
		onSuccess: function (transport) {
			var response = transport.responseText || "error";

			$('modal_container').update(response);
		},
		onFailure: function () { 
			minireg_forgotPassword_close();
		}
	  });//end new Ajax()
}

function minireg_forgotPassword2(prefix) {
	if(undefined==prefix) prefix = '';
	var email = document.getElementById(prefix+"mr_forgot_email").value;

	$('modal_container').update(minireg_forgotPassword_modalWindow_wait);

	params = Array();
	params['ajaxaction']	= 'minireg_forgotpassword2';
	params['email']			= email;
	new Ajax.Request('http://'+http_host+'/ajax-manager.php',
	  {
		method:'post',
		parameters: params,
		onSuccess: function (transport) {
			var response = transport.responseText || "error";

			$('modal_container').setStyle({height:'200px'});
			$('modal_container').setStyle({width:'550px'});
			centerModalWindow();

			$('modal_container').update(response);
		},
		onFailure: function () { 
			minireg_forgotPassword_close();
		}
	  });//end new Ajax()
}

function centerModalWindow() {
	var element=$('modal_container');
	var dimensions = element.getDimensions();
	Position.prepare();
	var offset_left = (Position.deltaX + Math.floor((Control.Modal.getWindowWidth() - dimensions.width) / 2));
	var offset_top = (Position.deltaY + ((Control.Modal.getWindowHeight() > dimensions.height) ? Math.floor((Control.Modal.getWindowHeight() - dimensions.height) / 2) : 0));
	element.setStyle({
		top: ((dimensions.height <= Control.Modal.getDocumentHeight()) ? ((offset_top != null && offset_top > 0) ? offset_top : '0') + 'px' : 0),
		left: ((dimensions.width <= Control.Modal.getDocumentWidth()) ? ((offset_left != null && offset_left > 0) ? offset_left : '0') + 'px' : 0)
	});
}

var AskQSubscribeToTags_working = false;
function AskQSubscribeToTags() {
	//make sure form is only submitted once
	if(AskQSubscribeToTags_working) return;
	AskQSubscribeToTags_working = true;
	//get checked boxes
	var frm = document.askQnewsletters.emailTag;
	var params = Array();
	var cnt = 0;
	for (i = 0; i < frm.length; i++) {
		if (frm[i].checked) {
			params['tag_'+cnt]=frm[i].value;
			cnt = cnt+1;
		}
	}
	params['count']=frm.length;

	if(document.askQnewsletters.tmList.checked) {
		params['newsletter'] = true;
	}

	var div = document.getElementById('askQnewsletters');
	div.innerHTML = '<div style="text-align:center;"><img src="'+image_uri+'ajax-loader.gif" /></div>';

	executeAjaxFunction('subscribeToTags', 'askQnewsletters', params);
}

function doNotSendOnOff(a, b) {}
