function validateRegister() {
	
	var form = document.forms['signUpForm'];
	
	// clear previous error message
	showSignUpErrorMessage("");
	
	// check username
	if (!checkEmptyField(form.username)) {
		showSignUpErrorMessage("Username cannot be empty!");
		form.username.focus();
		return false;
	}

	if (hasWhiteSpace(form.username.value)) {
		showSignUpErrorMessage("Username cannot contain spaces!");
		form.username.focus();
		return false;
	}
	if (form.username.value.length < 4) {
		showSignUpErrorMessage("Username must have at least 4 characters!");
		form.username.focus();
		return false;
	}
	var pat =/[^A-z0-9-_.]/;
	if (form.username.value.match(pat)!= null) {
		showSignUpErrorMessage("Username can only be alphanumeric with . _ -");
		form.username.focus();		
		return false;
	}
	// check email
	if (!checkEmptyField(form.email)) {
		showSignUpErrorMessage("E-Mail cannot be empty!");
		form.email.focus();
		return false;
	}
	var emailID = form.email;
	
	if (!emailCheck(emailID.value)) {
		showSignUpErrorMessage("E-Mail is invalid!");
		emailID.focus();
		return false;
	}	
	// check password
	if (!checkEmptyField(form.password)) {
		showSignUpErrorMessage("Password cannot be empty!");
		form.password.focus();
		return false;
	}
	if (hasWhiteSpace(form.password.value)) {
		showSignUpErrorMessage("Password cannot contain spaces!");
		form.password.focus();
		return false;
	}
	if (form.password.value.match(pat)!= null) {
		showSignUpErrorMessage("Password can only be alphanumeric with . _ -");
		form.password.focus();		
		return false;
	}
	if (form.password.value != form.passwordConfirm.value) {
		showSignUpErrorMessage("Passwords do not match!");
		form.passwordConfirm.focus();
		return false;
	}
	if (form.password.value.length < 4) {
		showSignUpErrorMessage("Password must have at least 4 characters!");
		form.password.focus();
		return false;
	}
	if (repeatedNumber(form.password.value)) {
		showSignUpErrorMessage("Password cannot have the same character!");
		form.password.focus();
		return false;
	}

	if (consecNumber(form.password.value)) {
		showSignUpErrorMessage("Password cannot have consecutive numbers!");
		form.password.focus();
		return false;
	}
	// verify captcha code
	if(!validateCaptcha(form.captcha.value)) {
		showSignUpErrorMessage("Code is not correct!");
		form.captcha.focus();
		return false;
	}
	if(!checkUserName(form.username.value)) {
		showSignUpErrorMessage("Username is not available!");
		form.username.focus();
		return false;
	}
	
	return true;

}

function hasWhiteSpace(s) {
		           
         // Check for white space
         if (s.indexOf(' ')==-1) {
              return false;
         }
    return true;
} 
function hasPlus(s) {
		           
         // Check for white space
         if (s.indexOf('+')==-1) {
              return false;
         }
    return true;
} 

function showSignUpErrorMessage(errorMsg) {
	var errorMsgDiv = document.getElementById("signUpErrorMsg");	
	errorMsgDiv.innerHTML = errorMsg;
}

function checkEmptyField(aField) {
	if (aField.value == null || aField.value.length == '')
		return false;
	else
		return true;
}

function checkUserName(username) {
	var params = "username=" + username;
	var response;
	var url = "actions/checkUsername.php";
	if (window.XMLHttpRequest) {
		// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
		xmlhttp.open("POST", url, false);
  	} else {
  		// code for IE6, IE5
  		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  		xmlhttp.open("POST", url, false);
  	}
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp.send(params);
	

			if(xmlhttp.status == 200) {
				response = xmlhttp.responseText;
			} else {
				alert("Error during AJAX call(Response: " + response + "). Please try again");
			}

	

	// we wait for response and the return the result (the request is synchronous)
	if(response == "available") {
		return true;
	} else if(response == "taken") {
		return false;
	}
}

function validateCaptcha(code) {
	var params = "code=" + code;
	var response;
	var url = "actions/validateCaptcha.php";
	if (window.XMLHttpRequest) {
		// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
		xmlhttp.open("POST", url, false);
  	} else {
  		// code for IE6, IE5
  		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  		xmlhttp.open("POST", url, false);
  	}
	
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp.send(params);

//	xmlhttp.onreadystatechange  = function () {
//		if (xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				response = xmlhttp.responseText;
			} else {
				alert("Error during AJAX call(Response: " + response + "). Please try again");
			}
//		}
//	};

	// we wait for response and the return the result (the request is synchronous)
	if(response == "valid") {
		return true;
	} else if(response == "invalid") {
		return false;
	}
}


function emailCheck(str) {
	var at = "@";
	var dot = ".";
	var lat = str.indexOf(at);
	var lstr = str.length;
	var ldot = str.indexOf(dot);
	var patt =/[^A-z0-9-_.@]/;
	if (str.indexOf(at) == -1) {
		return false;
	}
		
	if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
		return false;
	}
	if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0	|| str.indexOf(dot) == lstr) {
		return false;
	}
	if (str.indexOf(at, (lat + 1)) != -1) {
		return false;
	}
	if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
		return false;
	}
	if (str.indexOf(dot, (lat + 2)) == -1) {
		return false;
	}
	if (str.indexOf(" ") != -1) {
		return false;
	}
	if (ldot >= lstr - 2) {
		return false;
	}
	
	if (str.match(patt)!= null) {
		return false;
	}
	
	return true;
}

function validateInt(value) {
	var ValidChars="0123456789";
	var IsNumber = true;
	var Char;
	for(i=0; i<value.length && IsNumber==true; i++) {
		Char = value.charAt(i);
		if(ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}
function repeatedNumber(value) {
	var Char = value.charAt(0);
	for(i=1; i<value.length; i++) {
    	if (value.charAt(i) == Char) {
			continue;
		}
		else {
			return false;
		}
	}
	return true;
}
function consecNumber(value) {
	if (!validateInt(value)) {
		return false;
	}
	var Char = parseInt(value.charAt(0));
	for(i=1; i<value.length; i++) {
		if ( (parseInt(value.charAt(i)) == Char+1) || (parseInt(value.charAt(i)) == Char-1) ) {
			Char = parseInt(value.charAt(i));
			continue;
		}
		else {
			return false;
		}
	}
	return true;
}

function validateUser () {
	var form = document.forms['signUpForm'];
	var pat =/[^A-z0-9-_.]/;

	if ( (hasWhiteSpace(form.username.value)) || (form.username.value.length < 4) || (form.username.value.match(pat)!= null) ) {
		form.username.className = "username-input failed";		
	}

	else {
		
		form.username.className = "username-input accepted";
		
	}
}
function validateEmail () {
	var form = document.forms['signUpForm'];
	
	var emailID = form.email;
	
	if (!emailCheck(emailID.value)) {

		emailID.className = "failed";

	}	
	else {
	
		form.email.className = "accepted";
		
	}
}
function validatePass () {
	var form = document.forms['signUpForm'];
	var pat =/[^A-z0-9-_.]/;
	if ( (form.password.value.length < 4) || (hasWhiteSpace(form.password.value)) || (consecNumber(form.password.value)) || (repeatedNumber(form.password.value)) || (form.password.value.match(pat)!= null) ) {
		form.password.className = "failed";
	}

	else {
	
		if ( (checkEmptyField(form.passwordConfirm)) && (form.password.value != form.passwordConfirm.value) ) {
			form.passwordConfirm.className = "failed";
		}
		if (form.password.value == form.passwordConfirm.value) {
			form.passwordConfirm.className = "accepted";
		}
		
		form.password.className = "accepted";
		
	}
}	
function validatePass2 () {
	var form = document.forms['signUpForm'];
	
	if ( (form.password.value != form.passwordConfirm.value) || (form.password.value.length < 4) || (hasWhiteSpace(form.password.value)) || (consecNumber(form.password.value)) || (repeatedNumber(form.password.value)) ) {
		form.passwordConfirm.className = "failed";
	}
	else {
		form.passwordConfirm.className = "accepted";
	}
}	
function preloadImages() {
    var d = document;
    if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i, j = d.MM_p.length,
            a = preloadImages.arguments;
        for (i = 0; i < a.length; i++)
        if (a[i].indexOf("#") != 0) {
            d.MM_p[j] = new Image;
            d.MM_p[j++].src = a[i];
        }
    }
}
function userFocus(d) {
	if (d.className=='username-l1') {
		d.className='username-l2';
		d.value='';
	}
}
function passFocus(d) {
	if (d.className=='password-l1') {
		d.className='password-l2';
		d.value='';
	}
}		
