/**
 * @author Wrzasq <wrzasq@gmail.com>
 * @copyright 2008 - 2009 (C) by Wrzasq
 * @package WrzasqCMF
 * @version 0.0.1
 */

// main form
var registerForm;
var nameExists;
var emailExists;
var passwordExists;
var registerCheck;
var nameOk = false;
var emailOk = false;
var passwordOk = false;

// login and email checking
function checkRegister(transport)
{
	var data = transport.responseJSON;
	
	if(nameExists.parentNode)
	{
		nameExists.remove();
	}
	
	if(emailExists.parentNode)
	{
		emailExists.remove();
	}
	
    nameExists.update().removeClassName("existsNo").removeClassName("existsYes");
    emailExists.update().removeClassName("existsNo").removeClassName("existsYes");

    var message;
    
    for(var i in data)
    {
    	message = data[i].data;
    	
        if(i == "NameExists")
        {
            $(registerForm.elements["user[name]"].parentNode).insert( nameExists.addClassName(message.class).update(message.message) );
            nameOk = message.class == "existsNo";
        }
        else if(i == "EmailExists")
        {
            $(registerForm.elements["user[email]"].parentNode).insert( emailExists.addClassName(message.class).update(message.message) );
            emailOk = message.class == "existsNo";
        }
    }

    registerDecide();
}

// enables or disables submit button
function registerDecide()
{
	if(nameOk && emailOk && passwordOk)
	{
		registerForm.submit.enable();
	}
	else
	{
		registerForm.submit.disable();
	}
}

// initializes JavaScript interface
document.observe("dom:loaded", function() {
    registerForm = $("registerForm");
    
    nameExists = new Element("p");
    emailExists = new Element("p");
    passwordExists = new Element("p");

    registerForm.getElements().each( function(element) {
    	element = $(element);
    	
    	if(element.type == "submit")
    	{
    		this.submit = element;
    	}
    	
    	// fields updating actions
    	switch(element.name)
    	{
    	    // checks if login is already used
    		case "user[name]":
    			element.observe("change", function() {
    			    if(this.value.length > 0)
    			    {
    			    	var content = {
    						action: "Exists",
    						name: this.getValue()
    					};

    			        if(registerForm.elements["user[email]"].value.length > 0)
    			        {
    			        	content.email = registerForm.elements["user[email]"].getValue();
    			        }

        		    	// sends form in background
        				new Ajax.Request("/ajax.php", {
        					parameters: content,
        					onSuccess: checkRegister
        				} );
    			    }
    			    // disables form submiting
    			    else
    			    {
			            if(nameExists.parentNode)
			            {
			            	nameExists.remove();
			            }
			            
    			        nameOk = false;
    			        registerDecide();
    			    }
    			} );
    			break;
    			
    		case "user[password]":
    			element.observe("change", function() {
    			    if(this.value.length == 0)
    			    {
			            if(passwordExists.parentNode)
			            {
			            	passwordExists.remove();
			            }
			            
    			        passwordOk = false;
    			        registerDecide();
    			    }
    			} );
    			break;
    			
    		case "password":
    			element.observe("change", function() {
    			    if(this.value.length > 0)
    			    {
    			        passwordExists.update().removeClassName("existsNo").removeClassName("removeYes");

    			        // checks if passwords match
    			        if(this.value == registerForm.elements["user[password]"].getValue() )
    			        {
    			            passwordExists.addClassName("existsNo").update("Passwords match.");
    			            passwordOk = true;
    			        }
    			        else
    			        {
    			            passwordExists.addClassName("existsYes").update("Passwords don't match.");
    			            passwordOk = false;
    			        }

    			        $(this.parentNode).insert(passwordExists);
    			    }
    			    else
    			    {
			            if(passwordExists.parentNode)
			            {
			            	passwordExists.remove();
			            }
			            
    			        passwordOk = false;
    			    }

    			    registerDecide();
    			} );
    			break;
    			
		    // checks if email is already used
    		case "user[email]":
    			element.observe("change", function() {
    			    if(this.value.length > 0)
    			    {
    			    	var content = {
    						action: "Exists",
    						email: this.getValue()
    					};

    			        if(registerForm.elements["user[name]"].value.length > 0)
    			        {
    			        	content.name = registerForm.elements["user[name]"].getValue();
    			        }

        		    	// sends form in background
        				new Ajax.Request("/ajax.php", {
        					parameters: content,
        					onSuccess: checkRegister
        				} );
    			    }
    			    // disables form submiting
    			    else
    			    {
			            if(emailExists.parentNode)
			            {
			            	emailExists.remove();
			            }
			            
    			        emailOk = false;
    			        registerDecide();
    			    }
    			} );
    			break;
    	}
    }.bind(registerForm) );

    registerForm.submit.disable();
} );
