/**
 * @author Daniel Story
 */


var error_EMAIL = "Be sure to enter your e-mail address correctly, as an email will be sent to you with an url to activate the account.";
var error_PASS = "To be sure your account is secure, a password is required. Only a-z, A-Z, and/or 0-9 characters are allowed and at least 6 characters long.";
var error_CONFIRMPASS = "You most retype your password exactly the same twice to make sure you did not miss-type it the first time.";
var error_IMGVERIFY = "Image verification is required to make sure a spam-bot is not creating an account. The image verification code is case-sensitive. If you are unable to clearly read the verification code try pressing the refresh button to create a new verification code, or contact the web site administration.";
var error_NAME = "The display name you have supplied has either invalid characters, or doesn't meet the minimal length. Please retry entering a name with only a-z, A-Z, and/or 0-9 characters ( special characters accepted () - _ and white space ); and also the display name length most have at least 4 characters.";

var obj_EMAIL = false;
var obj_PASS = false;
var obj_CONFIRMPASS = false;
var obj_IMGVERIFY = false;
var obj_NAME = false;

var GettingVerifyResult;
var xmlDoc;
var xmlDocLoaded;
var xmlHttpLoaded;
var isIE;
var xmlhttp;

var objWarning = false;

function error_Hover(e){
	if(!objWarning){return;}
	if(objWarning.style.display!='none'){objWarning.style.display='none';}
	var obj = getEventObject(e);
	var objX=0;
	var objY=0;
	
	if(obj.className!='field-error'){ return; }
	
	objX = findPosX(obj);
	objY = findPosY(obj);
	
	var warningMessage = '';
	
	switch(obj.getAttribute('id'))
	{
		case 'reg-email':
			warningMessage = error_EMAIL;
			break;
		case 'reg-pass':
			warningMessage = error_PASS;
			break;
		case 'reg-confirmpass':
			warningMessage = error_CONFIRMPASS;
			break;
		case 'reg-name':
			warningMessage = error_NAME;
			break;
		case 'reg-imageverify':
			warningMessage = error_IMGVERIFY;
			break;
	}
	
	objWarning.innerHTML = warningMessage;
	objWarning.style.display='block';
	objWarning.style.left= (objX - objWarning.offsetWidth - 1) + 'px';
	objWarning.style.top= (objY + obj.offsetHeight) + 'px';
}

function error_Blur(e){
	if(!objWarning){return;}
	var obj = getEventObject(e);
	if(objWarning.style.display!='none'){objWarning.style.display='none';}
}

function checkForm(e){
	if( document.forms.namedItem("form_register") == null ){ return;  }
	var showTip=false;
	if( !e )
	{
		if( !check_email( document.form_register.register_email.value ) ){ showTip=true; }
		if( !check_password( document.form_register.register_password.value ) ){ showTip=true; }
		if( !check_confirmpassword( document.form_register.register_password.value, document.form_register.register_confirmpassword.value ) ){ showTip=true; }
		if( !check_membername( document.form_register.register_displayname.value ) ){ showTip=true; }
		if( !check_imageverify( document.form_register.register_imageverify.value ) ){ showTip=true; }
	}else{
		var obj = getEventObject(e);
		switch(obj.getAttribute('id'))
		{
			case 'register_email':
				if( !check_email( document.form_register.register_email.value ) ){ showTip=true; }
				if(!showTip){
					//if( !check_email( document.form_register.register_email.value ) ){ showTip=true; }
					if( !check_password( document.form_register.register_password.value ) ){ showTip=true; }
					if( !check_confirmpassword( document.form_register.register_password.value, document.form_register.register_confirmpassword.value ) ){ showTip=true; }
					if( !check_membername( document.form_register.register_displayname.value ) ){ showTip=true; }
					if( !check_imageverify( document.form_register.register_imageverify.value ) ){ showTip=true; }
				}
				break;
			case 'register_password':
			case 'register_confirmpassword':
				if( !check_password( document.form_register.register_password.value ) ){ showTip=true; }
				if( !check_confirmpassword( document.form_register.register_password.value, document.form_register.register_confirmpassword.value ) ){ showTip=true; }
				if(!showTip){
					if( !check_email( document.form_register.register_email.value ) ){ showTip=true; }
					if( !check_password( document.form_register.register_password.value ) ){ showTip=true; }
					if( !check_confirmpassword( document.form_register.register_password.value, document.form_register.register_confirmpassword.value ) ){ showTip=true; }
					if( !check_membername( document.form_register.register_displayname.value ) ){ showTip=true; }
					if( !check_imageverify( document.form_register.register_imageverify.value ) ){ showTip=true; }
				}
				break;
			case 'register_displayname':
				if( !check_membername( document.form_register.register_displayname.value ) ){ showTip=true; }
				if(!showTip){
					if( !check_email( document.form_register.register_email.value ) ){ showTip=true; }
					if( !check_password( document.form_register.register_password.value ) ){ showTip=true; }
					if( !check_confirmpassword( document.form_register.register_password.value, document.form_register.register_confirmpassword.value ) ){ showTip=true; }
					//if( !check_membername( document.form_register.register_displayname.value ) ){ showTip=true; }
					if( !check_imageverify( document.form_register.register_imageverify.value ) ){ showTip=true; }
				}
				break;
			case 'register_imageverify':
				if( !check_imageverify( document.form_register.register_imageverify.value ) ){ showTip=true; }
				if(!showTip){
					//if( !check_email( document.form_register.register_email.value ) ){ showTip=true; }
					if( !check_password( document.form_register.register_password.value ) ){ showTip=true; }
					if( !check_confirmpassword( document.form_register.register_password.value, document.form_register.register_confirmpassword.value ) ){ showTip=true; }
					if( !check_membername( document.form_register.register_displayname.value ) ){ showTip=true; }
					//if( !check_imageverify( document.form_register.reg-imageverify.value ) ){ showTip=true; }
				}
				break;
		}
	}
	if( !showTip ){
		document.getElementById('reg-legend').className='legend-invisible';
	}else{
		document.getElementById('reg-legend').className='legend';
	}
}

function refreshImageVerify(e)
{
	var obj = document.getElementById('imageverify');
	var objSrc = obj.src;
	obj.src = BASE_URI + '/blank.gif' + '#'+(new Date()).getTime();
	obj.src = objSrc + '#'+(new Date()).getTime();;
}

function regvalidation_document_loaded()
{
	obj_EMAIL = document.getElementById('reg-email');
	obj_PASS = document.getElementById('reg-pass');
	obj_CONFIRMPASS = document.getElementById('reg-confirmpass');
	obj_IMGVERIFY = document.getElementById('reg-imageverify');
	obj_NAME = document.getElementById('reg-name');
	
	objWarning = document.getElementById('reg-warning');
	//setOpacity(objWarning, 95);
	
	addEvent(obj_EMAIL, "mouseover", error_Hover);
	addEvent(obj_PASS, "mouseover", error_Hover);
	addEvent(obj_CONFIRMPASS, "mouseover", error_Hover);
	addEvent(obj_IMGVERIFY, "mouseover", error_Hover);
	addEvent(obj_NAME, "mouseover", error_Hover);
	
	addEvent(obj_EMAIL, "mouseout", error_Blur);
	addEvent(obj_PASS, "mouseout", error_Blur);
	addEvent(obj_CONFIRMPASS, "mouseout", error_Blur);
	addEvent(obj_IMGVERIFY, "mouseout", error_Blur);
	addEvent(obj_NAME, "mouseout", error_Blur);

	var eObj = false;
	eObj = document.getElementById('register_email');
	addEvent(eObj, "click", checkForm);
	addEvent(eObj, "keyup", checkForm);
	addEvent(eObj, "blur", checkForm);
	
	eObj = document.getElementById('register_password');
	addEvent(eObj, "click", checkForm);
	addEvent(eObj, "keyup", checkForm);
	addEvent(eObj, "blur", checkForm);
	
	eObj = document.getElementById('register_confirmpassword');
	addEvent(eObj, "click", checkForm);
	addEvent(eObj, "keyup", checkForm);
	addEvent(eObj, "blur", checkForm);
	
	eObj = document.getElementById('register_displayname');
	addEvent(eObj, "click", checkForm);
	addEvent(eObj, "keyup", checkForm);
	addEvent(eObj, "blur", checkForm);
	
	eObj = document.getElementById('register_imageverify');
	addEvent(eObj, "click", checkForm);
	addEvent(eObj, "keyup", checkForm);
	addEvent(eObj, "blur", checkForm);
	
	eObj = document.getElementById('reg-imagerefresh');
	addEvent(eObj, "click", refreshImageVerify);

	checkForm(false);
}

function check_membername( strname )
{
	if( !obj_NAME ){  return false; }
	if( ( isValidNameChars( strname ) == true ) && ( isEmpty( strname ) == false ) )
	{ obj_NAME.className='field-check'; return true; }else{ obj_NAME.className='field-error'; return false; }
}

function check_password( strpass )
{
	if( !obj_PASS ){  return false; }
	if( ( isValidPassChars( strpass ) == true ) && ( isEmpty( strpass ) == false ) )
	{ obj_PASS.className='field-check'; return true; }else{ obj_PASS.className='field-error'; return false; }
}

function check_confirmpassword( strpass, strconfirm )
{
	if( !obj_CONFIRMPASS ){  return false; }
	if( ( isValidPassChars( strconfirm ) == true ) && ( isValidPassChars( strpass ) == true ) && ( isEmpty( strconfirm ) == false ) && ( isEmpty( strpass ) == false ) && ( strconfirm === strpass ) )
	{ obj_CONFIRMPASS.className='field-check'; return true; }else{ obj_CONFIRMPASS.className='field-error'; return false; }
}

function check_email( stremail )
{
	if( !obj_EMAIL ){  return false; }
	if( ( isValidEmail( stremail ) == true ) && ( isEmpty( stremail ) == false ) )
	{ obj_EMAIL.className='field-check'; return true; }else{ obj_EMAIL.className='field-error'; return false; }
}

function check_imageverify( strcode )
{
	if( !obj_IMGVERIFY ){  return false; }
	if( isValidCodeChars( strcode ) == false )
	{
		obj_IMGVERIFY.className='field-error'; return false;
	}
	else
	{
		if( GettingVerifyResult ){ return false; }
		//if the name match result is pending then exit.

		if (window.ActiveXObject)
		{
			xmlDoc = new ActiveXObject( "Microsoft.XMLDOM" );
			xmlDoc.async = false;
			xmlDocLoaded = true;
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
			if( xmlhttp )
			{
				xmlhttp.onreadystatechange=imgv_state_Change;
				xmlHttpLoaded = true;
			}
			else { xmlHttpLoaded = false; }
			isIE = true;
		}
		else if (document.implementation && document.implementation.createDocument)
		{
			xmlDoc= document.implementation.createDocument( "","",null );
			xmlDocLoaded = true;
			isIE = false;

			xmlhttp=new XMLHttpRequest();
			if( xmlhttp )
			{
				xmlhttp.onreadystatechange=imgv_state_Change;
				xmlHttpLoaded = true;
			}
			else { xmlHttpLoaded = false; }
		}
		else
		{
			xmlDocLoaded = false;
		}

		if( xmlHttpLoaded==true )
		{
			GettingVerifyResult = true;
			if( isIE == true )
			{
				xmlhttp.open( "GET", BASE_URI + '/imageverify.php?vcode='+encodeurl(strcode), true );
				xmlhttp.send();
			}
			else
			{
				xmlhttp.open( "GET", BASE_URI + '/imageverify.php?vcode='+encodeurl(strcode), true );
				xmlhttp.send( null );
			}
		}
		else
		{
			obj_IMGVERIFY.style.display='none';
		}
		
		return false;
	}
}

function imgv_state_Change()
{
	if (xmlhttp.readyState==4)
  	{
  		if (xmlhttp.status==200)
  		{
			
			if( xmlhttp.responseText == 'TRUE' )
			{
				obj_IMGVERIFY.className='field-check';
			}
			else
			{
				obj_IMGVERIFY.className='field-error';
			}
		}
		if( (obj_EMAIL.className=='field-check') && (obj_CONFIRMPASS.className=='field-check') && (obj_IMGVERIFY.className=='field-check') && (obj_NAME.className=='field-check') && (obj_PASS.className=='field-check') )
		{
			document.getElementById('reg-legend').className='legend-invisible';
		}else{
			document.getElementById('reg-legend').className='legend';
		}
  	}
	GettingVerifyResult = false;
}

function encodeurl( str ) {
	var result = "";

	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") result += "+";
		else result += str.charAt(i);
	}

	return escape(result);
}

function isValidNameChars( str )
{
	var pattern = /^[0-9a-zA-Z\(\)\-\_\s]{4,32}$/;
	return pattern.test(str);
}

function isValidCodeChars( str )
{
    var pattern = /^[0-9a-zA-Z]{1,}$/;
	return pattern.test(str);
}

function isValidActiveKey( str )
{
    var pattern = /^[0-9a-z]{32}$/;
	return pattern.test(str);
}

function isValidPassChars( str )
{
    var pattern = /^[0-9a-zA-Z]{6,32}$/;
	return pattern.test(str);
}

function isValidEmail( str ){
    var pattern = /^[._a-zA-Z0-9-]+@[.a-zA-Z0-9-]+[.]{1}[a-zA-Z]{2,4}$/;
	return pattern.test(str);
}

function isEmpty( str ){
    var pattern = /^[s ]*$$/;
	return pattern.test(str);
}

addEvent(window, "load", regvalidation_document_loaded);