/**
 * Registration related scripts
 * 
 * @author Erick S
 * @copyright Shin1 (http://www.shin1.co.il)
 * @version 1.0.2
 */

/** Our AJAX request */
var xhr = null;

/** Submit button activation */
function updateSubmitButton()
{
	$('submitButton').disabled = (document.forms['regForm'].elements['verify'].checked) ? false : true;
}

function refreshCaptcha()
{
	$('captchaBtn').disabled = true;
	var element = $('captchaImg');
	if (element.onload == null)
	{
		element.onload = function()
		{
			$('captchaBtn').disabled = false;
		}
	}
	element.src = '/captcha.php?rand=' + Math.floor(Math.random() * 100000);
}

/** Tests for local errors. On success checks name and nick availability */
function formSubmit()
{
	var mailRegexp = /^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$/;
	var nickRegexp = /[^_\-\^}{0-9a-zA-Zאבגדהוזחטיכלמנסעפצקרשתםןךףץ]/;
	var charRegexp = /[a-zA-Zאבגדהוזחטיכלמנסעפצקרשתםןךףץ]/;
	var errors = new Array();
	try
	{
		var form = document.forms['regForm'];
		var email = trim(form.elements['email'].value);
		email = email.toLowerCase();
		if (email.length == 0) errors.push('אי-מייל הוא שדה חבה');
		else if (!mailRegexp.test(email)) errors.push("כתובת אי-מייל לא-תקנית");
		var pass1 = trim(form.elements['pass1'].value);
		var pass2 = form.elements['pass2'].value;
		if (pass1.length == 0) errors.push('סיסמה היא שדה חובה');
		else if (pass1.length < 6) errors.push('אנא מלאו לפחות 6 אותיות בסיסמא')
		else if (pass1 != pass2) errors.push('שדות הסיסמה אינם זהים');
		var nick = trim(form.elements['nick'].value);
		if (nick.length == 0) errors.push('כינוי הוא שדה חובה');
		else if (nickRegexp.test(nick)) errors.push('הכינוי מכיל תוים לא-תקניים');
		else if (!charRegexp.test(nick)) errors.push('על הכינוי להכיל לפחות אות אחת');
		var captcha = trim(form.elements['captcha'].value);
		if (captcha.length == 0) errors.push('אנא מלאו את האותיות המופיעות בתמונה');
		if (form.elements['verify'].checked == false) errors.push('יש להסכים לתנאי האתר כדי להרשם');
		if (errors.length > 0) throw Error(errors.join("\n"));
	}
	catch (ex)
	{
		alert(ex.message);
		return false;
	}
	if (xhr == null) xhr = new XHR();
	else if (xhr.InProgress()) return;
	var postInfo = "act=lookup&email="+email+"&nick="+nick;
	xhr.SetErrorFunc(formSubmitError);
	$('submitButton').value = "בודק...";
	xhr.Post(window.location,postInfo,formSubmit2);
}

function formSubmit2(responseText)
{
	var result = eval("("+responseText+");");
	var errors = new Array();
	if (result.error)
	{
		errors.push(result.error);
		return;
	}
	else
	{
		if (result.email == 0) errors.push("האי-מייל כבר תפוס");
		if (result.nick == 0) errors.push("הכינוי כבר תפוס");
	}
	if (errors.length > 0)
	{
		alert(errors.join("\n"));
		$('submitButton').value = "הרשמה";
		return;
	}

	document.forms['regForm'].onsubmit = null;
	document.forms['regForm'].submit();
}

function formSubmitError(errorText)
{
	alert(errorText);
	$('submitButton').value = "הרשמה";
}

function checkPass(element)
{
	var value = element.value;
	var element = $('passVerdict');
	if (value.length == 0)
	{
		element.innerHTML = '';
		return;
	}
	var verdict,color;
	
	var score = passwordStrength(value);	
	if (score < 10)
	{
		verdict = "לא משהו";
		color = '#AA0000';
	}
	else if (score < 20)
	{
		verdict = "בסדר"
		color = '#DD8000';
	}
	else if (score < 30)
	{
		verdict = "טובה";
		color = '#008800';
	}
	else
	{
		verdict = "חבל על הזמן";
		color = '#00AA00';
	}
	element.style.color = color;
	element.innerHTML = verdict;
}

/** Password Strength Algorithm. Made a bit more lenient.
 * 
 * Courtesy of http://www.geekwisdom.com/dyn/passwdmeter
 * @author Steve Moitozo <god at zilla dot us> -- geekwisdom.com
 */
function passwordStrength(passwd)
{
		var intScore   = 0
		var strVerdict = '';
		var hasEnglish=false,hasHebrew=false,hasNumbers=false,hasSpecial=false
		
		// PASSWORD LENGTH
		intScore += (Math.floor(passwd.length * 3 / 4));
		// LETTERS
		if (passwd.match(/[a-zA-Z]/)) // At least one English letter
		{
			intScore += 5
			hasEnglish = true
		}
		if (passwd.match(/[א-ת]/)) // Hebrew letters
		{
			intScore += 5;
			hasHebrew = true;
		}		
		// NUMBERS
		if (passwd.match(/\d+/)) // At least one number
		{
			intScore += 5
			hasNumbers = true
		}
		// SPECIAL CHAR
		if (passwd.match(/.[!,@,#,$,%,^,&,*,?,_,~]/)) // At least one special character
		{
			intScore += 5
			// At least two special characters
			if (passwd.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/))
				intScore += 5			

			hasSpecial = true
		}

		/* COMBOS */
		// English and Hebrew
		if (hasEnglish && hasHebrew)	intScore += 4
		// Both letters and numbers
		if (hasNumbers && (hasEnglish || hasHebrew))
		{
			intScore += 4
			// If it has special characters too, extra bonus
			if (hasSpecial) intScore += 2
		}
		return intScore;
}
/** When users request validation mail */
function sendValidationMail()
{
	var email = trim($('email').value);
	if (!email) return;
	if (xhr == null) xhr = new XHR();
	
	xhr.SetErrorFunc(sendValidationMailError);
	xhr.Post('/srv/login/process.php','act=sendval&email='+email,sendValidationMailResult);
	$('validateButton').disabled = true;
}
function sendValidationMailError(errorText)
{
	alert('errorr: '+errorText);
	$('validateButton').disabled = false;	
}
function sendValidationMailResult(responseText)
{
	try
	{
		var result = eval("("+responseText+");");
		if (result.error) throw Error('achle: '+result.error);

		if (result.sent == 1) alert("נשלח בהצלחה");
	}
	catch (ex)
	{
		alert(ex.message);
	}
	$('validateButton').disabled = false;
}
