// JavaScript Document
//
// User Registration (and changing passwords)
//

// Password strength meter
// This jQuery plugin is written by firas kassem [2007.04.05]
// Firas Kassem  phiras.wordpress.com || phiras at gmail {dot} com
// for more information : http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/

var noPass = 'No Password Entered';
var shortPass = '<font color="red">Too short</font>'
var badPass = '<font color="red">Weak</font>'
var goodPass = '<font color="#FFB00F">Good</font>'
var strongPass = '<font color="green">Strong</font>'
var invalidPass = '<font color="red">Invalid Character</font>';

function passwordStrength(password,username)
{
	score = 0 

	if (!password) return noPass;
	//password < 4
	if (password.length < 6 ) { return shortPass }

	//password == username
	if (password.toLowerCase()==username.toLowerCase()) return badPass

	if (password.match(/[^0-9A-Za-z]/)) {
		return invalidPass;
	}

	//password length
	//score += password.length * 4
	//score += ( checkRepetition(1,password).length - password.length ) * 1
	//score += ( checkRepetition(2,password).length - password.length ) * 1
	//score += ( checkRepetition(3,password).length - password.length ) * 1
	//score += ( checkRepetition(4,password).length - password.length ) * 1
	if (password.length > 6) {
		score += 30;
	}

	//password has 3 numbers
	//if (password.match(/(.*[0-9].*[0-9].*[0-9])/))  score += 5 

	//password has 2 sybols
	//if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5 

	//password has Upper and Lower chars
	if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 30 

	//password has number and chars
	if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))  score += 30
	//password has number and symbol
	//if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/))  score += 15 

	//password has char and symbol
	//if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/))  score += 20 

	//password is just a nubers or chars
	if (password.match(/^\w+$/) || password.match(/^\d+$/) )  score -= 20 

	//verifing 0 < score < 100
	if ( score < 0 )  score = 0 
	if ( score > 100 )  score = 100 

	if (score < 34 )  return badPass 
	if (score < 60 )  return goodPass
	return strongPass
}

// checkRepetition(1,'aaaaaaabcbc')   = 'abcbc'
// checkRepetition(2,'aaaaaaabcbc')   = 'aabc'
// checkRepetition(2,'aaaaaaabcdbcd') = 'aabcd'

function checkRepetition(pLen,str) {
	res = ""
	for ( i=0; i<str.length ; i++ ) {
		repeated=true
		for (j=0;j < pLen && (j+i+pLen) < str.length;j++)
			repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen))
			if (j<pLen) repeated=false
			if (repeated) {
				i+=pLen-1
				repeated=false
			}
			else {
				res+=str.charAt(i)
			}
		}
	return res
}

function checkConfirmed (field1, field2) {
	var val1 = jQuery('input[@name='+field1+']').val();
	var val2 = jQuery('input[@name='+field2+']').val();
	if (!val1 || !val2) {
		jQuery('span#check_'+field2).removeClass('sf_register_confirmed');
		return false;
	}
	if(val1 == val2) {
		jQuery('span#check_'+field2).addClass('sf_register_confirmed');
	} else {
		jQuery('span#check_'+field2).removeClass('sf_register_confirmed');
	}

	return false;
}

function handleUsernameCheck (checkusernamereturn) {
	var usernamereturn = JSON.parse(checkusernamereturn);
	jQuery('span#check_username').removeClass('sf_register_confirmed');
	jQuery('div#block_username').removeClass('error');

	if (usernamereturn['success']) {
		jQuery('span#check_username').addClass('sf_register_confirmed');
	} else {
		jQuery('div#block_username').addClass('error');
	} 
	jQuery('span#usernamefeedback').html(usernamereturn['feedback']);
	return void(0);
}


function checkUsername(username) {
	if (username && username.length > 3) {
		x_sfsajax_check_username(username, handleUsernameCheck);
	} 
}

function populateUsernames (usernames) {
	if (!usernames) { 
		return "";
	}

	var names = usernames.split("||");

	jQuery('div#namesuggest').removeClass('hide');
	for (var i = 0; i < names.length; i++) {
		jQuery('input#inputnamesuggest'+i).val(names[i]);
		jQuery('label#namesuggest'+i).html(names[i]);
	}

	return 1;
}


function suggestUsername () {
	var firstname = jQuery('input[@name=firstname]').val();
	var lastname = jQuery('input[@name=lastname]').val();
	var username = jQuery('input[@name=username]').val();

	
	//grey out the suggest username button
	x_sfsajax_suggest_username(firstname + "||" + lastname + "||" + username, populateUsernames);
	//grey in the username button
	return void(0);
}

function setUsername (username) {
	jQuery('input[@name=username]').val(username);
	jQuery('div#namesuggest').addClass('hide');
	checkUsername(username);
}

function handleValidation(checkvarsreturn) {
	var returnvals = JSON.parse(checkvarsreturn);	

	jQuery("h4.error").addClass("hide");
	jQuery("div.error").each( function() { this.className="btmform" });
	if (returnvals['success']) {
		document.userreg.submit();
		return 1;
	}
	window.scroll(0,0);

	jQuery("h4#dynamicfeedback").html(returnvals['feedback']);
	jQuery("h4#dynamicfeedback").removeClass('hide');

	for (var i = 0; i < returnvals['badfields'].length; i++) {
		if (returnvals['badfields'][i] == 'ageconfirm') {
			jQuery("div#block_acceptterms").addClass('error');
			//age confirm doesn't get it's own block.  don't ask	
		} else {
			jQuery("div#block_"+returnvals['badfields'][i]).addClass('error');

		}

		if (returnvals['badfields'][i] == 'username') {
			checkUsername(jQuery('input[@name=username]').val());
		}
	}
	return 0;
}

function validateForm() {
	var formelements = new Object();
	jQuery("#userreg input").each( function() { formelements[this.name] = this.value; });
	formelements['language'] = jQuery('select[@name=language]').val();
	formelements['country'] = jQuery('select[@name=country]').val();
	formelements['timezone'] = jQuery('select[@name=timezone]').val();
	formelements['securityquestion'] = jQuery('input[@name=securityquestion]').val();
	formelements['securityquestionpopulate'] = jQuery('select[@name=securityquestionpopulate]').val();

	if (formelements['securityquestionpopulate'] != "Enter your own question") {

		formelements['securityquestion'] = jQuery('select[@name=securityquestionpopulate]').val();
	}

	formelements['securityanswer'] = jQuery('input[@name=securityanswer]').val();
	formelements['acceptterms'] = jQuery('input[@name=acceptterms]').attr('checked');
	formelements['ageconfirm'] = jQuery('input[@name=ageconfirm]').attr('checked'); 

	x_sfsajax_checkvars(JSON.stringify(formelements), handleValidation);

	return void(0);
}


var manuallyeditedpublicname = 0;
function updatePublicname () {
	if (!manuallyeditedpublicname) {
		jQuery('input[@name=publicname]').val(jQuery('input[@name=firstname]').val()+' '+ jQuery('input[@name=lastname]').val());
	}
}
//
// Account/Password Recovery
//

function select_method (method) {
	jQuery("#form_email").hide();
	jQuery("#form_password").hide();
	jQuery("#form_support").hide();
	jQuery("#form_password_question").hide();
                                            
	jQuery("h4#dynamicfeedback").addClass('hide');

	jQuery(method).show();
}

function get_security_question() {
	var username = jQuery("#user_name").val();
	var json = [];

	jQuery.getJSON(json_url, { method: "password", sf_user_name: username }, 
		function(json) {
			if (json.error) {
				jQuery("h4#dynamicfeedback").html(json.error);
				jQuery("h4#dynamicfeedback").removeClass('hide');
			} else {
				select_method("#form_password_question");
				jQuery("#security_question").html(json.question);
			}
		});
}

function check_security_question() {
	var username = jQuery("#user_name").val();
	var answer = jQuery("#answer").val();
	var json = [];
	
	jQuery.getJSON(json_url, { method: "password", sf_user_name: username, answer: answer }, 
		function(json) {
			if (json.error) {
				jQuery("h4#dynamicfeedback").html(json.error);
				jQuery("h4#dynamicfeedback").removeClass('hide');
			} else {
				document.recovery.submit();
			}
		});
}

function validate_form_email() {     
	if (jQuery("#email").val()) {
		document.recovery.submit();
	} else {
		jQuery("h4#dynamicfeedback").html('You must enter a valid e-mail address.');
		jQuery("h4#dynamicfeedback").removeClass('hide');
	}
}

function validate_form_support() {       
	if (jQuery("#support_email").val() && jQuery("#message").val() && jQuery("#support_account").val()) {
		document.recovery.submit();
	} else {
		jQuery("h4#dynamicfeedback").html('You must enter valid e-mail addresses and a detailed description of the problem.');
		jQuery("h4#dynamicfeedback").removeClass('hide');
	}
}

function validate_form_password() {
	document.recovery.submit();
}
function emailValidation(str) 
{

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		 //  alert("Invalid E-mail ID")
		   return '@ is missing'
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		  // alert("Invalid E-mail ID")
		   return '@ is missing'
		}
		 if (str.indexOf(" ")!=-1){
		   // alert("Invalid E-mail ID")
		    return 'Space is not allowed'
		 }
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		  //  alert("Invalid E-mail ID")
		    return 'dot is missing'
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		   // alert("Invalid E-mail ID")
		    return 'Invalid at'
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		   // alert("Invalid E-mail ID")
		    return 'Invalid dot'
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		  //  alert("Invalid E-mail ID")
		    return 'Invalid dot'
		 }
		 if (str.indexOf(dot) == (str.length)-1){
		  //  alert("Invalid E-mail ID")
		    return 'Enter Value after dot'
		 }

		

 		 return ''					
}

//function email_format_check() added by Astin on 15-Dec-2008
function email_format_check()
{
		var email_id=document.create_account.email_address.value;

		var a=emailValidation(email_id);

		if(a=='')
		{
			document.create_account.email_address.style.backgroundColor ='#a5e5a0';	
			document.getElementById('email_res').innerHTML='<font color="green">Valid Email</font>';			
		}
		else
		{
			document.create_account.email_address.style.backgroundColor ='#f7b9b9';
			document.getElementById('email_res').innerHTML='<font color="red">InValid Email:'+(a)+'</font/>';		
		}
}

function pass()
{
	
	document.getElementById('res').innerHTML=passwordStrength(document.create_account.password.value,'');
	
	var passwordValue=document.getElementById('res').textContent 
	

	if(passwordValue=='Weak'||passwordValue=='Too short'||passwordValue=='Invalid Character')
	{
	
		document.create_account.password.style.backgroundColor ='#f7b9b9';	
	}
	else
	{
		document.create_account.password.style.backgroundColor ='#a5e5a0';	
	}
}
function pass1()
{

	document.getElementById('res1').innerHTML=passwordStrength(document.create_account.confirmation.value,'');
	var passwordValue=document.getElementById('res1').textContent 
	
	if(passwordValue=='Weak'||passwordValue=='Too short'||passwordValue=='Invalid Character')
	{	
		document.create_account.confirmation.style.backgroundColor ='#f7b9b9';	
	}
	else
	{
		document.create_account.confirmation.style.backgroundColor ='#a5e5a0';	
	}
}

