/*	
	1 - user not allowed
	2 - user too short
	3 - user too long
	4 - user invalid
	5 - user exists
	6 - email invalid
	7 - email exists
	8 - pass1 too short
	9 - pass1 too long
	10 - pass1 weak
	11 - pass1 like username
	12 - pass2 does not match pass1
       13 - pass1 invalid
*/

mondo_reg_error_codes = new Array();

mondo_reg_user_status  = -1;
mondo_reg_pass1_status = -1;
mondo_reg_pass2_status = -1;
mondo_reg_email_status = -1;
mondo_reg_all_ok = false;
var pass2_enabled = true;
var email_optional = false;

if (typeof mondo_reg_special == 'undefined')
{
	mondo_reg_submit_button_id = 'mondo_reg_submit';
}
else
{
	mondo_reg_submit_button_id = 'mondo_reg_submit_btn';
}

function MondoRegCheckAjax(name, value)
{
	if (name == 'user' || name == 'email')
	{
	  var http_request = MondoRegMakeRequest();
	  var url = mondo_reg_ajax_url+'&'+name+'='+escape(value);
	  http_request.open('GET', url, true);
	  http_request.onreadystatechange = function() { MondoRegGetResponse(http_request); };
	  http_request.send(null);
	}
	else
	{
		MondoRegProcessResult(name, value, null);
	}
}

function MondoRegMakeRequest()
{
  var http_request = false;
  if (window.XMLHttpRequest)
  { 
    http_request = new XMLHttpRequest();
  } 
  else if (window.ActiveXObject) 
  { 
       try 
	   {
          http_request = new ActiveXObject("Msxml2.XMLHTTP");
       } 
	   catch (e) 
	   {
            try 
			{
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } 
			catch (e) {}
       }
  }
  if (!http_request) 
  {     
     return false;
  }
  return http_request;
}


function MondoRegGetResponse(http_request)
{
  if (http_request.readyState == 4 || http_request.readyState == 'complete') 
  { 
     if (http_request.status == 200) 
	 {
		temp = http_request.responseText;
		temp = temp.split("=");
		tmp_rq_field = temp[0];
		tmp_rq_code = temp[1];

		MondoRegProcessResult(tmp_rq_field, null, tmp_rq_code);
     } 
  }
}



function MondoRegProcessResult(field, value, code)
{
	//USER
	if (field == 'user')
	{
		document.getElementById('mondo_reg_user_info').style.display = (code == -1) ? 'block' : 'none';
		document.getElementById('mondo_reg_user_err').style.display = (code > 0) ? 'block' : 'none';
		document.getElementById('mondo_reg_user_ok').style.display = (code == 0) ? 'block' : 'none';

		if (code >0 )
		{
			document.getElementById('mondo_reg_user_err_msg').innerHTML = mondo_reg_error_codes[code];
		}

		mondo_reg_user_status = code
	}
	
	
	
	//EMAIL
	if (field == 'email')
	{
		document.getElementById('mondo_reg_email_info').style.display = (code == -1) ? 'block' : 'none';
		document.getElementById('mondo_reg_email_err').style.display = (code > 0) ? 'block' : 'none';
		document.getElementById('mondo_reg_email_ok').style.display = (code == 0) ? 'block' : 'none';

		if (code >0 )
		{
			document.getElementById('mondo_reg_email_err_msg').innerHTML = mondo_reg_error_codes[code];
		}

		mondo_reg_email_status = code
	}

	//PASS1
	if (field == 'pass1')
	{		
		user = document.getElementById('mondo_reg_user').value;
		if (!value)
		{
			code = -1
		}
		else if (value.length < 6)
		{
			code = 8
		}
		else if (value.length > 32)
		{
			code = 9
		}
		else if (!value.match(/[A-Za-z]/) || !value.match(/[0-9]/))
		{
			code = 10;
		}
		else if (!value.match(/^[A-Za-z0-9]+$/))
		{
			code = 13;
		}
		else if (value == user)
		{
			code = 11;
		}
		else
		{
			code = 0;
		}
			
		document.getElementById('mondo_reg_pass1_info').style.display = (code == -1) ? 'block' : 'none';
		document.getElementById('mondo_reg_pass1_err').style.display = (code > 0) ? 'block' : 'none';
		document.getElementById('mondo_reg_pass1_ok').style.display = (code == 0) ? 'block' : 'none';

		if (code >0 )
		{
			document.getElementById('mondo_reg_pass1_err_msg').innerHTML = mondo_reg_error_codes[code];
		}

		mondo_reg_pass1_status = code

		//each time pass1 is changed, reest pass2
		if (pass2_enabled) {
			if (value != document.getElementById('mondo_reg_pass2').value)
			{
				document.getElementById('mondo_reg_pass2').value = '';
				document.getElementById('mondo_reg_pass2_info').style.display = 'block';
				document.getElementById('mondo_reg_pass2_err').style.display = 'none';
				document.getElementById('mondo_reg_pass2_ok').style.display = 'none';
			}
			document.getElementById('mondo_reg_pass2').disabled = (code!=0) ? true : false;
		}

	}
	
	//PASS2
	if (field == 'pass2')
	{
		pass1 = document.getElementById('mondo_reg_pass1').value;

		if (!value)
		{
			code = -1;
		}
		else if (value != pass1)
		{
			code = 12;
		}
		else
		{
			code = 0;
		}

		document.getElementById('mondo_reg_pass2_info').style.display = (code == -1) ? 'block' : 'none';
		document.getElementById('mondo_reg_pass2_err').style.display = (code > 0) ? 'block' : 'none';
		document.getElementById('mondo_reg_pass2_ok').style.display = (code == 0) ? 'block' : 'none';

		if (code >0 )
		{
			document.getElementById('mondo_reg_pass2_err_msg').innerHTML = mondo_reg_error_codes[code];
		}

		mondo_reg_pass2_status = code;
	}

	mondo_reg_all_ok = (mondo_reg_user_status==0 && mondo_reg_pass1_status==0 && (!pass2_enabled || mondo_reg_pass2_status==0) && ((email_optional && mondo_reg_email_status == -1) || mondo_reg_email_status==0)) ? true : false;

	
	document.getElementById(mondo_reg_submit_button_id).disabled = mondo_reg_all_ok ? false : true;
	document.getElementById('mondo_reg_submit').className = mondo_reg_all_ok ? mondo_reg_submit_btn_class : mondo_reg_submit_btn_class_inactive;
}


function MondoRegSubmit()
{	
	//final check
	MondoRegCheckAjax('user',  document.getElementById('mondo_reg_user').value);
	MondoRegCheckAjax('pass1', document.getElementById('mondo_reg_pass1').value);
	if (pass2_enabled) {
    MondoRegCheckAjax('pass2', document.getElementById('mondo_reg_pass2').value);
	}
  MondoRegCheckAjax('email', document.getElementById('mondo_reg_email').value);

	if (mondo_reg_all_ok)
	{
		document.getElementById(mondo_reg_submit_button_id).style.display = 'none';
		document.getElementById('mondo_reg_wait_msg').style.visibility = 'visible';
		document.getElementById('mondo_reg_wait_msg').style.display = 'block';
		document.forms.subscribe.submit();
	}
}

