/*  OPTIONIZE Register JS
    Copyright 2009
*/

$(document).ready(function(){
	
	initNameSplitter();
	
	initPasswordScreen();
	
	$("#email").bind('blur',function(){ checkErrors(this,"email") });
	$("#password").bind('blur',function(){ checkErrors(this) });
	$("#password_screen").bind('blur',function(){ checkErrors(this) });
	
	$("#register_now").bind('submit',function(){ submitRegistration(); return false; });
	
	var $password = $("#password");
	var $pwscreen = $("#password_screen");
	
	$password.val("").css("opacity",0);
	$pwscreen.val("").css("opacity",0);
	
	setTimeout(function(){ $password.val("").animate({ opacity: 1 },200);
		$pwscreen.val("").animate({ opacity: 1 },200); },150)
	setTimeout(function(){ $password.val("").animate({ opacity: 1 },200);
		$pwscreen.val("").animate({ opacity: 1 },200); },300)
	setTimeout(function(){ $password.val("").animate({ opacity: 1 },200);
		$pwscreen.val("").animate({ opacity: 1 },200); },450)
	setTimeout(function(){ $password.val("").animate({ opacity: 1 },200);
		$pwscreen.val("").animate({ opacity: 1 },200); },600)
	setTimeout(function(){ $password.val("").animate({ opacity: 1 },200);
		$pwscreen.val("").animate({ opacity: 1 },200); },750)

});

function initNameSplitter(){
	
	var $first_name = $("#first_name");
	var $name_inputs = $("#name_inputs");

	$first_name.focus().bind('blur',function(){
		if ($first_name.val().indexOf(" ") != -1) { splitName(); }
		checkErrors(this);
	})
	
	function splitName(){

		var full_name = $first_name.val().split(" ");
		var first_name = full_name[0];
		
		if (full_name.length > 2) {

			var middle_name = full_name[1];

			if (full_name.length > 3) {
				for (i=2;i<(full_name.length-1);i++) {
					middle_name += ' '+full_name[i]; }
				var last_name = full_name[(full_name.length - 1)];
			} else { var last_name = full_name[2]; }

		} else if (full_name.length == 2) {

			var last_name = full_name[1];

		}
		
		var str = '<div class="first_name"><label for="first_name">First</label><input id="first_name" name="name[first]" type="text" class="text okay" value="' + first_name + '" /></div>';
		
		if (middle_name != null) {
			str += '<div class="middle_name"><label for="middle_name">Middle</label><input id="middle_name" name="name[middle]" type="text" class="text okay" value="' + middle_name + '" /></div>';
			str += '<div class="last_name"><label for="last_name">Last</label><input id="last_name" name="name[last]" type="text" class="text okay" value="' + last_name + '" /></div>';
			$name_inputs.attr("class","three_names");
		} else {
			str += '<div class="last_name"><label for="last_name">Last</label><input id="last_name" name="name[last]" type="text" class="text okay" value="' + last_name + '" /></div>';
			$name_inputs.attr("class","two_names");
		}
		
		$name_inputs.html(str);
		
		$("#email").focus();
		
		$first_name.unbind('blur');
		
		$name_inputs.find(":input").bind('blur',function(){ checkErrors(this) });

	}
	
}

function initPasswordScreen(){
	
	var $password = $("#password");
	var $pwscreen = $("#password_screen");
	var $toggle = $("#toggle_password");
	var $toggle_link = $("#toggle_password_link");
	
	$password.val($pwscreen.val());
	
	$password.bind('keyup',function(){ $pwscreen.val($password.val()); })
	$pwscreen.bind('keyup',function(){ $password.val($pwscreen.val()); })

	$toggle_link.click(function(){ toggleScreen(); return false; });
	
	function toggleScreen(){
		
		if ($pwscreen.is(":hidden")) {
			
			$pwscreen.show();
			$toggle.attr("class","hide");
			$toggle_link.text("Hide");
			$pwscreen.focus();
			checkErrors($pwscreen);
			
		} else {
			
			$pwscreen.hide();
			$toggle.attr("class","show");
			$toggle_link.text("Show");
			$password.focus();
			checkErrors($password);
			
		}

	}
	
/* Set selection point... to be implemented at some point in the near future,
from http://groups.google.com/group/jquery-en/browse_thread/thread/febb1c9927b33d85

	function setSelectionRangeX(input, selectionStart, selectionEnd) { 
   // IE 
   if (input.createTextRange) { 
      var range = input.createTextRange(); 
      range.collapse(true); 
      range.moveEnd('character', selectionEnd); 
      range.moveStart('character', selectionStart); 
      range.select(); 
    // real browsers :) 
    } else if (input.setSelectionRange) { 
      input.focus(); 
      input.setSelectionRange(selectionStart, selectionEnd); 
    } 
}

And this from George IV on stackoverflow
http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity/1127605#1127605

function setCaret()
{
    ctrl = document.getElementById('txt1');
    pos = ctrl.value.length;
    if(ctrl.setSelectionRange)
    {
        ctrl.focus();
        ctrl.setSelectionRange(pos,pos);
    }
    else if (ctrl.createTextRange) {
        var range = ctrl.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}

*/
	
}

function checkErrors(elem,type){

	var $input = $(elem);
	var email_filter = /^[a-zA-Z0-9\._%\+\-]+[^\.]@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,6}$/;
	
	if (type == "email") {
		
		$('div.email label').fadeOut(200);

		$.post('/ajax/register-exists.php',
			{ email: $input.val() }, function(msg,textStatus){
				//alert(textStatus+" "+msg)
				if (!email_filter.test($input.val()) || msg == 1)
					$input.removeClass("okay").addClass("error");
				else $input.removeClass("error").addClass("okay");
				if (msg == 1) {
                    $input.before('<label for="email" class="error">Please try again &mdash; that email is already in use.</label>');
                }
			}, "text");

	} else {

		if ($input.val() == "" || (type == "email" && !email_filter.test($input.val()))) {
            $input.removeClass("okay").addClass("error");
        }
		else $input.removeClass("error").addClass("okay");

	}
	
}

function submitRegistration(){
	
	var errors = false;
	var email_filter = /^[a-zA-Z0-9\._%\+\-]+[^\.]@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,6}$/;
	var $email = $("#email");
	
	checkErrors($("#first_name"));
	if ($("#middle_name").length != 0) checkErrors($("#middle_name"));
	if ($("#last_name").length != 0) checkErrors($("#last_name"));

//	checkErrors($email,"email");
	checkErrors($("#password"));
	checkErrors($("#password_screen"));
	
	$.post('/ajax/register-exists.php',
		{ email: $email.val() }, function(msg,textStatus){

			if (!email_filter.test($email.val()) || msg == 1)
				$email.removeClass("okay").addClass("error");
			else $email.removeClass("error").addClass("okay");

			if (msg == 1) {
				$email.before('<label for="email" class="error">Please try again &mdash; that email is already in use.</label>');
			}

			$("#register_now :input").each(function(){
				if ($(this).hasClass("error")) {
					$(this).parents("dd").prev().addClass("error");
					errors = true;
				}
			})
	
			if (errors == false) $("#register_now").unbind().submit();

		}, "text");
	
}


