/**
 * Signup validation
 *
 * Validates entered signup fields for correct values.
 * Checks availability of the choose user name using AJAX request to server
 *
 * @author	Demid O. Nikitin
 *
 */

// Main validation class
function Validation(){}


Validation.FLAG_TRY_OTHER_NAME = false;
// Caption for button when it is checking username
Validation.MSG_CHECKING = 'Checking...';
// Caption for standard state of the button
Validation.MSG_CHECK_AVAILABILITY = 'Check Availability';
Validation.MSG_TRY_OTHER = 'Please try other name';
Validation.MSG_ENTER_USERNAME = 'Please enter user name';

Validation.URL_CORRECT = "url('images/accept.gif')";
Validation.URL_INCORRECT = "url('images/exclamation.gif')";

Validation.ID_UNAME = 'uname';
Validation.ID_UNAME_STATUS = 'uname_status';

Validation.ID_PASSWORD = 'password2';
Validation.ID_CPASSWORD = 'cpassword';

Validation.ID_PASSWORD_STATUS = 'password_status';
Validation.ID_CPASSWORD_STATUS = 'cpassword_status';

Validation.ID_EMAIL = 'email2';
Validation.ID_EMAIL_STATUS = 'email_status';

Validation.ID_CHECK_BUTTON = 'check_btn';
Validation.ID_CHECK_BUTTON_CNT = 'cv';

Validation.ID_BMONTH = 'bmonth';
Validation.ID_BDAY = 'bday';
Validation.ID_BYEAR = 'byear';
Validation.ID_BIRTH_DATE_STATUS = 'birth_date_status';

/**
 * Validates entered email address
 */
function validateEmail(){
	var value = $F(Validation.ID_EMAIL);
	
	if(value && value.match(/[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,4}/)){
		setAccept($(Validation.ID_EMAIL_STATUS));
	}else{
		setExclamation($(Validation.ID_EMAIL_STATUS));
	}

	return false;
}

/** 
 * Evaluates when user write something in username field
 */
function onNameKeyPress(){
	if($F(Validation.ID_UNAME).length < 2){
		$(Validation.ID_CHECK_BUTTON).hide();
		$(Validation.ID_CHECK_BUTTON_CNT).style.display = 'none';
	}else{
		$(Validation.ID_CHECK_BUTTON).show();
		$(Validation.ID_CHECK_BUTTON_CNT).style.display = 'inline';
	}

	setClear($(Validation.ID_UNAME_STATUS));
	
	if(Validation.FLAG_TRY_OTHER_NAME){
		$(Validation.ID_CHECK_BUTTON).innerHTML = Validation.MSG_CHECK_AVAILABILITY;
		Validation.FLAG_TRY_OTHER_NAME = false;
	}
}

/**
 * Validates if login specified by user already exists
 * @return	bool
 */
function validateName(){
    var value = $F(Validation.ID_UNAME);
            
    if(!value){
    	alert(Validation.MSG_ENTER_USERNAME);
    	return;
    }

    var btnCtrl = $(Validation.ID_CHECK_BUTTON);
    btnCtrl.innerHTML = Validation.MSG_CHECKING;

    //btnCtrl.hide();
	// Send AJAX request using prototype library
	new Ajax.Request(
		'inc/validate_name.inc.php',
		{
			onSuccess : function(transport){
				completeValidateName(transport.responseText);
			},
	
			parameters : Form.serializeElements([$(Validation.ID_UNAME)])
		},
		function(){
		    //btnCtrl.show();
		}
	);
}

/**
 * Executes when ajax request is successfull
 * Checks server response and sets specified status
 */
function completeValidateName(res)
{
	var btnCtrl = $(Validation.ID_CHECK_BUTTON);
	
	
	if(res)
	{
		setAccept($(Validation.ID_UNAME_STATUS));
	    btnCtrl.innerHTML = Validation.MSG_CHECK_AVAILABILITY;
	    btnCtrl.hide();
	}
	else
	{
	    btnCtrl.innerHTML = Validation.MSG_TRY_OTHER;
		setExclamation($(Validation.ID_UNAME_STATUS));
	    Validation.FLAG_TRY_OTHER_NAME = true;
	    btnCtrl.show();
	}
	
	$(Validation.ID_CHECK_BUTTON_CNT).style.display = 'inline';

}

/**
 * Validates if password are the same
 * @param	isLengthChecked	Should the length of the password and 
 * 			confirm password be cheked. onKeyUp if cpass.length < pass.length
 *			images are not shown. On blur it should be shown in any case
 *
 */
function validatePasswords(isLengthChecked){
	if(!isLengthChecked){
		isLengthChecked = false;
	}
	var value1 = $F(Validation.ID_PASSWORD);
	var value2 = $F(Validation.ID_CPASSWORD);

	if(value1 && value2 && (value2.length >= value1.length || !isLengthChecked)){
		if(value1 == value2){
			setAccept($(Validation.ID_PASSWORD_STATUS));
			setAccept($(Validation.ID_CPASSWORD_STATUS));
		}else{
			setExclamation($(Validation.ID_PASSWORD_STATUS));
			setExclamation($(Validation.ID_CPASSWORD_STATUS));
		}
	}else if($F(Validation.ID_PASSWORD) && $F(Validation.ID_CPASSWORD)){
		setClear($(Validation.ID_PASSWORD_STATUS));
		setClear($(Validation.ID_CPASSWORD_STATUS));
	}
}

function validateBirthDate() {
	var bmonth_value = $('bmonth').options[$('bmonth').selectedIndex].value;
	var bday_value = $('bday').options[$('bday').selectedIndex].value;
	var byear_value = $('byear').options[$('byear').selectedIndex].value;
	
	if (bmonth_value &&  bday_value && byear_value) {
		setClear($(Validation.ID_BIRTH_DATE_STATUS));
		return true;
	} else {
		setClear($(Validation.ID_BIRTH_DATE_STATUS));
		setExclamation($(Validation.ID_BIRTH_DATE_STATUS));
	}
}

/**
 * Validate if provided required field is empty or not
 * @param	ctrl	Field to validate
 * @param	statusCtrl	Linked status HTML element
 */
function validateRequired(ctrl, statusCtrl){
	if(!ctrl.value){
		setExclamation(statusCtrl);
	}else{
		setAccept(statusCtrl);
	}
}

/**
 * Sets accept state to control
 */
function setAccept(ctrl){
	ctrl.style.backgroundImage = Validation.URL_CORRECT;
}

/**
 * Sets clear state to control
 */
function setClear(ctrl){
	ctrl.style.backgroundImage = '';
}


/**
 * Sets exclamation state to control
 */
function setExclamation(ctrl){
	ctrl.style.backgroundImage = Validation.URL_INCORRECT;
}
