var objToValidate = null;
var savedValue    = null;
var validationResultsCleared = false;

function validate(event)
{
	var obj = Event.element(event);
	if(!obj.hasClassName('auto_validate'))
	{
		obj = null;
	}
	
	if(objToValidate && objToValidate.value && obj != objToValidate && validationResultsCleared)
	{
		if(objToValidate.id == 'retyped_password')
		{
			validateRetypedPassword();
		}
		else if(objToValidate.id == 'retyped_new_password')
		{
			validateRetypedNewPassword();
		}
		else
		{
			var matches = objToValidate.form.action.match(/[^\/]+\.html/);
			var action  = objToValidate.form.action.replace(matches[0], "validate-" + matches[0]);
			
			new Ajax.Request(action,{ method:'get',
									  parameters: { value: objToValidate.value , attribute: objToValidate.id, token: $('token').value},
									  onSuccess:
									  function(transport) 
									  {
										  var data = transport.responseText.evalJSON();
										  if(data.result == "ok")
										  {
										  		validationPassed(data.attribute, data.value);
										  }
										  else
										  {
										  		validationFailed(data.attribute, data.messages, data.value);
										  		if(data.attribute == 'captcha_phrase' && $('captcha_image'))
										  		{
										  			reloadCaptchaImage();
										  		}
										  }
									  }
									  });
		}
		validationResultsCleared = false;
	}
	objToValidate = obj;
	savedValue    = null;
	
	clearValidationResult();
}

function reloadCaptchaImage()
{
	var captchaImage = $('captcha_image');
	var currentTime  = new Date();
	if(Prototype.Browser.IE)
	{
		var filter = $('captcha_image').runtimeStyle.filter;
		var match  = filter.match(/nc=(.+?)\',/);
		var re     = new RegExp(match[1]);
		captchaImage.runtimeStyle.filter = filter.replace(re, currentTime.getTime());
	}
	else
	{
		var captchaImageSrc = captchaImage.src.replace(/\?nc=\d*/,"");
		captchaImage.src    = captchaImageSrc + "?nc=" + currentTime.getTime();
	}
}

function validateRetypedPassword()
{
	var password        = $('password');
	var retypedPassword = $('retyped_password');
	if(retypedPassword.value == password.value)
	{
		validationPassed("retyped_password");
	}
	else
	{
		validationFailed("retyped_password", PASSWORDS_NOT_SAME);
	}
}

function validateRetypedNewPassword()
{
	var password        = $('new_password');
	var retypedPassword = $('retyped_new_password');
	if(retypedPassword.value == password.value)
	{
		validationPassed("retyped_new_password");
	}
	else
	{
		validationFailed("retyped_new_password", PASSWORDS_NOT_SAME);
	}
}


function validationPassed(attribute, value)
{
	var titleObj = $(attribute + "_title");
	if(titleObj.hasClassName('error'))
	{
		titleObj.removeClassName('error');
	}
	titleObj.addClassName('ok');
	if(value != null)
	{
		$(attribute).value = value; 
	}
}

function validationFailed(attribute, text, value)
{
	var titleObj = $(attribute + "_title");
	if(titleObj)
	{
		if(titleObj.hasClassName('ok'))
		{
			titleObj.removeClassName('ok');
		}
		titleObj.addClassName('error');
		titleObj.title = text;
	}
	if(value != null)
	{
		$(attribute).value = value;
	}
}

function clearValidationResult()
{
	if(objToValidate != null)
	{
		if(savedValue != null && savedValue != objToValidate.value)
		{
			var titleObj = $(objToValidate.id + "_title");
			if(titleObj.hasClassName('ok'))
			{
				titleObj.removeClassName('ok');
			}
			if(titleObj.hasClassName('error'))
			{
				titleObj.removeClassName('error');
			}
			titleObj.title = "";
			validationResultsCleared = true;
		}
		savedValue = objToValidate.value;
		setTimeout(clearValidationResult, 500);
	}
}

function toggleAreaEmptyMessage(obj)
{
	var parent  = $(obj.parentNode);
	if(obj.value)
	{
		if(!parent.hasClassName('not_empty'))
		{
			parent.addClassName('not_empty');
		}
	}
	else
	{
		if(parent.hasClassName('not_empty'))
		{
			parent.removeClassName('not_empty');
		}
	}
}

function toggleChecked(obj)
{
	var parent = $(obj.parentNode);
	if(obj.checked)
	{
		if(!parent.hasClassName('checked'))
		{
			parent.addClassName('checked');
		}
	}
	else
	{
		if(parent.hasClassName('checked'))
		{
			parent.removeClassName('checked');
		}
	}	
}