var targetdiv = ''; 
var error = [true,true,true];
var error_pos = 0;

function checkNickname(nickname) {
    var filter = /^[a-z\d_]{5,20}$/;
    if (!filter.test(nickname))
	return false;
    return true; 

}

function checkEmail(email) {
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!filter.test(email)) {
	return false;
    }
    return true;
}

function check_fields() {
    var noerror = true;
    for(var i=0;i<error.length;i++) {
	if (error[i] == true)
	    noerror = false;
    }

    if (!noerror)
	document.getElementById('submit').disabled = true;
    else
	document.getElementById('submit').disabled = false;
}

function toggle_value(userid) {
    handle = document.getElementById(userid);
    var terminate = false;
    var llength = 3;
    var ulength = 50;
    if (userid == 'username') {
	error_pos = 0;
	targetdiv='username_exists';
	if (!checkNickname(handle.value)) {
	    document.getElementById(targetdiv).innerHTML = '<font color="#FF3300">Invalid nickname entered!</font>';
	    error[0] = true;
	    check_fields();
	    return;
	}
	error[0] = false;
	ulength=15;
    } else if (userid == 'email' || userid == 'confirm_email') {
	error_pos = 1;
	llength=5;
	targetdiv='email_exists';
	if (!checkEmail(handle.value)) {
	    document.getElementById(targetdiv).innerHTML = '<font color="#FF3300">Invalid email entered!</font>';
	    error[1] = true;
	    check_fields();
	    return;
	}
	if (userid == 'confirm_email')
	    email = document.getElementById('email');
	else
	    email = document.getElementById('confirm_email');
	    
	if (email.value != handle.value) {
	    error[1] = true;
	    document.getElementById(targetdiv).innerHTML = '<font color="#FF3300">Emails do not match! Please correct!</font>';
	    check_fields();
	    return;
	} else {
	    document.getElementById(targetdiv).innerHTML = '';
	}
	if (!checkEmail(handle.value)) {
	    document.getElementById(targetdiv).innerHTML = '<font color="#FF3300">Invalid email entered!</font>';
	    error[1] = true;
	    check_fields();
	    return;
	} else {
	    document.getElementById(targetdiv).innerHTML = '';
	}
	error[1] = false;
        check_fields();
    } else if (userid == 'password' || userid == 'confirm_password') {
	error_pos = 2;
	targetdiv='password_exists';
	llength=6;
	terminate=true;
	if (userid == 'confirm_password')
	    password = document.getElementById('password');
	else
	    password = document.getElementById('confirm_password');
	    
	if (password.value != handle.value) {
	    document.getElementById(targetdiv).innerHTML = '<font color="#FF3300">Passwords do not match! Please correct!</font>';
	    error[2] = true;
	} 
	else {
	    document.getElementById(targetdiv).innerHTML = '';
	    error[2] = false;
	}
    } else {
	targetdiv='';
        check_fields();
	return;
    }

    if (handle.value.length < llength || handle.value.length > ulength) {
	document.getElementById(targetdiv).innerHTML = '<font color="#FF3300">Value has to be longer than '+llength+' characters and less than '+ulength+'!</font>';
	error[error_pos] = true;
        check_fields();
	return;
    } 
    
    check_fields();
    if (terminate)
	return;

    if (window.XMLHttpRequest) {
        http = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        http = new ActiveXObject("Microsoft.XMLHTTP");
    }
    var url = 'signup.php?';
    if(handle.value.length > 0) {
        var fullurl = url + 'action='+targetdiv+'&value=' + encodeURIComponent(handle.value);
        http.open("GET", fullurl, true);
        http.send(null);
        http.onreadystatechange = statechange_value;
    }else{
        document.getElementById(targetdiv).innerHTML = '';
    }
}

function statechange_value() {
    if (http.readyState == 4) {
	var result = http.responseText.split("|!|");
	if (result.length > 1) {
	    if (result[0] == 'true') error[error_pos]=true;
	    else error[error_pos]=false;
	    document.getElementById(targetdiv).innerHTML = result[1];
	    check_fields();
	}
    }
} 

