Logger.full_disable();

function Signup() {
}

Signup.check_delay		= new Object();
Signup.check_delay.user_name	= 2000;
Signup.check_delay.password1	= 2000;
Signup.check_delay.password2	= Signup.check_delay.password1;
Signup.check_delay.email	= 2000;
Signup.check_delay.code		= 2000;

Signup.timeout_inaccuracy	= 100;

Signup.pwd_blink_delay		= 250;
Signup.pwd_blink_times		= 5;
Signup.pwd_min_characters	= 4;

Signup.verification_code_size	= 6;

Signup.isOK 		= new Object();
Signup.isOK.form	= 0;
Signup.isOK.user_name	= 0;
Signup.isOK.password1	= 0;
Signup.isOK.email	= 0;
Signup.isOK.agree	= 1;
Signup.isOK.code	= 0;

Signup.timeLastButtonPressed = Array();
Signup.valueLastTimeChecked  = Array();

var refresh_image_in_progress = 0;
var val_code_ok_disable_refresh = 0

Signup.refreshValImage = function Signup_refreshValidationImage() {
   if (refresh_image_in_progress == 1 || val_code_ok_disable_refresh == 1) {
      return;
   }
   refresh_image_in_progress = 1;
   
   Core.setText('code', '');
   Core.setText('code_error', '');
   Core.addToClassName('captcha_img', 'busy');
   
   var val_hash = Core.getText('code_hash');
   
   if (val_hash) {
      var send_data = new Object();
      send_data.old_hash = val_hash;
      Ajax.sendRequest('val_image', 'refresh_validation_img', Signup.insertNewValidationImage, send_data);
   }
}

Signup.insertNewValidationImage = function Signup_insertNewValidationImage(response) {
	var response_data = response;
   
   if (response_data && response_data.params) {
      if (response_data.params.state == "ok" && response_data.params.new_hash) {
         Core.setText('val_image', '');
         var random_number = Math.random();
         var image = Core.getElementU('v_image1');
         image.src = Core.localizeURL('http://signup.fotki.com/') + 'image?code='+response_data.params.new_hash+'&variant=2&refresh='+random_number;
         
         var image2 = Core.getElementU('v_image2');
         image2.src = Core.localizeURL('http://signup.fotki.com/') + 'image?code='+response_data.params.new_hash+'&variant=2&part=1&refresh='+random_number;
         Core.setText('code_hash', response_data.params.new_hash);
      } else {

      }
   }
   
   Core.replaceInClassName('captcha_img', 'busy', '');
   refresh_image_in_progress = 0;
}

Signup.isChecked = function Signup_isChecked(token, value) {
	if (Signup.valueLastTimeChecked[token] && Signup.valueLastTimeChecked[token] == value) {
		return true;
	} else {
		return false;
	}
}

Signup.setChecked = function Signup_setChecked(token, value) {
	Signup.valueLastTimeChecked[token] = value;
}

Signup.hitToken = function Signup_hitToken(token) {
	return Signup.timeLastButtonPressed[token] = new Date().getTime();
}

Signup.getTokenDuration = function Signup_getTokenDuration(token) {
	return (new Date().getTime() - Signup.timeLastButtonPressed[token]);
}


Signup.hitItem = function Signup_hitItem(token) {
	//RULE: token == form input name
	Signup.hitToken(token);
	var input_value = Core.getText(token);

	if (Signup.isChecked(token, input_value)) {
		return;
	} else {
		//Signup.setChecked(token, input_value);
	}

	Signup.isOK[token] = false;
	Core.setText(token + '_error', '');
	Core.setText(token + '_ok', '');
	Signup.checkItem(token);
	Signup.validateForm();
}


Signup.checkItem = function Signup_checkItem(token) {
	var input_value = Core.getText(token);
	Signup.isOK[token] = false;

	if (token == 'user_name' || token == 'code') {
		Core.setText(token+'_ok', '');
		Core.setText(token+'_error', '');
		
      var ready_to_send_request = false;
	   if (!input_value && token == 'user_name') {
         Core.setText(token+'_error', LangDict.translateToken("Signup.UserName.IsEmpty"));
      } else if (token == 'code' && input_value.length < Signup.verification_code_size) {
         Core.setText(token+'_error', LangDict.translateToken("Signup.Code.WrongCodeEntered"));
      } else {
         ready_to_send_request = true;
      }

		var send_data = new Object();
		send_data.input_value = input_value;

		if (token == 'code') {
			send_data.code_hash = Core.getText('code_hash');
		}

		//if token==code then we must also pass code_hash; See ajax server-side impl.
      if (ready_to_send_request == true) {
         Core.showElement(token + '_busy');
   		Ajax.sendRequest(token, 'validate', Signup.ajaxResponser, send_data );
      }
	} else if (token == 'email') {
		if (Core.validateEmail(input_value)) {
		   Core.setText('email_ok',LangDict.translateToken("Signup.OK"));
		   Signup.isOK.email = true;
		} else {
			Core.setText('email_error', LangDict.translateToken("Signup.EMail.ProvideValidEmail"));
		}
	} else if (token == 'password1' || token == 'password2') {
		p1 = Core.getText('password1');
		p2 = Core.getText('password2');
		Core.setText('password1_error', '');
		Core.setText('password2_error', '');
		Core.setText('password2_ok', '');
		Core.setText('password1_ok', '');
			
		if (p1.length < Signup.pwd_min_characters) {
         Core.setText('password1_error', LangDict.translateToken("Signup.Password.UseAtLeast4Chars"));
		} else if (p1=='' && p2=='') {

		} else if (p1!=p2) {
			if (p2=='') {
				Core.setText('password2_error', LangDict.translateToken("Signup.Password.RepeatPassword"));
			} else {
				Core.setText('password2_error', LangDict.translateToken("Signup.Password.ReenterPassword"));
			}
		} else {
			Core.setText('password1_ok', LangDict.translateToken("Signup.OK"));
			Core.setText('password2_ok', LangDict.translateToken("Signup.OK"));
			Signup.isOK.password1 = true;
		}
	}

	Signup.setChecked(token, input_value);
	Signup.validateForm();
}


Signup.buttonPressed = function Signup_buttonPressed(token) {
	if (token == 'code') {
		code = Core.getText(token);

		if (code.length == Signup.verification_code_size) {
			Signup.hitItem('code');
		}
	} else if (token == 'password') {
		p1 = Core.getText('password1');
		p2 = Core.getText('password2');

		if (p1!='' && p1.length >= Signup.pwd_min_characters && (p1==p2 || p1.length == p2.length)) {
			Signup.hitItem('password2');
		}
	}
}


Signup.ajaxResponser = function Signup_ajaxResponser(response) {
	if (!response.params || !response.data || !response.token) {
		return Logger.log('Empty response! [' + !response.params +'|'+ !response.data +'|'+ !response.token+ ']');
	} 

	var state	= response.params.state;
	var asked_value	= response.params.input_value;

	Core.hideElement(response.token + '_busy');
	Signup.isOK[response.token] = false;

	if (response.token == 'user_name') {
		var user_name = Core.getText('user_name');

		if (user_name == asked_value) {
			if (state == 'OK') {
				Core.setText('user_name_ok', LangDict.translateToken("Signup.OK"));
				Signup.isOK.user_name = true;
			} else if (state == 'WRONG') {
				Core.setText('user_name_error', LangDict.translateToken("Signup.UserName.NumbersAndLatinChar"));
			} else if (state == 'UNAVAILABLE') {
				Core.setText('user_name_error', '<B>' + user_name + '</B> ' + LangDict.translateToken("Signup.UserName.IsTakenAlready"));
			} else {
				if (user_name.replace(' ','') == '') {
					Core.setText('user_name_error', LangDict.translateToken("Signup.UserName.PleaseEnterUsername"));
				} else {
					Core.setText('user_name_error', LangDict.translateToken("Signup.Code.ValidationError"));
				}
			}
		}
	} else if (response.token == 'code') {
		Signup.isOK.code = false;

		if (Core.getText('code') == asked_value) {
			if (state == 'OK') {
				Core.setText('code_ok', LangDict.translateToken("Signup.OK"));
            val_code_ok_disable_refresh = 1;
            Core.setText('refresh_button', '');
				Signup.isOK.code = true;
			} else if (state == 'SHORT') {
				Core.setText('code_error', LangDict.translateToken("Signup.Code.EnterEntireValidationCode"));
			} else if (state == 'WRONG') {
				Core.setText('code_error', LangDict.translateToken("Signup.Code.WrongCodeEntered"));
			} else {
				Core.setText('code_error', LangDict.translateToken("Signup.Code.ValidationError"));
			}
		}
	}

	Signup.validateForm();
}


Signup.validateForm = function Signup_validateForm() {
	Signup.isOK.agree = Core.getElementU('agree').checked;
	Core.getElementU('agree_validity').className = (Signup.isOK.agree) ? '' : 'valueWrong';

	Signup.isOK.form = (Signup.isOK.user_name && Signup.isOK.password1 && Signup.isOK.email &&
			Signup.isOK.agree && Signup.isOK.code);

	//	document.sform.submit.disabled = !Signup.isOK.form;
	Core.getElementU('register_button').className = (Signup.isOK.form ? 'button' : 'button_disabled');

	if (Signup.submitPressed) {
		Signup.submitPressed = false;

		if (Signup.isOK.form) {
         Core.getElementU("sform").submit();
		}
	}

	return Signup.isOK.form;
}


Signup.submitPressed = false;

Signup.submitCheck = function Signup_submitCheck() {
	if (!Signup.isOK.user_name) {
		Signup.checkItem('user_name');
	}

	if (!Signup.isOK.password1) {
		Signup.checkItem('password1');
	}

	if (!Signup.isOK.email) {
		Signup.checkItem('email');
	}

	if (!Signup.isOK.code) {
		Signup.checkItem('code');
	}

	if (!Signup.isOK.agree) {
		Signup.checkItem('agree');
	}

	Signup.submitPressed = true;
	if (!Signup.validateForm()) {
		return false;
	}
	return true;
}
