function openXMLHttp() {
	var xmlHttp;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
		return xmlHttp;
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			return xmlHttp;
		} catch (e)	{
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				return xmlHttp;
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
}

function requestLogin()
{
	var xmlHttp;
	xmlHttp = openXMLHttp();
	xmlHttp.onreadystatechange=function() {
		if(xmlHttp.readyState==4) {
			document.getElementById("message").innerHTML = xmlHttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;
		}
	}
	xmlHttp.open("POST","/middleware/user/views.py/request_login",true);
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttp.send('userinfo='+document.getElementById('request_login').userinfo.value);
}

function checkUser()
{
	var xmlHttp;
	xmlHttp = openXMLHttp();
	xmlHttp.onreadystatechange=function() {
		if(xmlHttp.readyState==4) {
			if (xmlHttp.responseXML.getElementsByTagName('response')[0].getAttribute("status")=="ERROR") {
				document.getElementById("message").innerHTML = xmlHttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;
			} else {
				register();
			}
		}
	}
	xmlHttp.open("POST","/middleware/user/views.py/check_user",true);
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttp.send('username='+document.getElementById('username').value+"&email="+document.getElementById('email').value);
}

function register()
{
	var xmlHttp;
	xmlHttp = openXMLHttp();
	xmlHttp.onreadystatechange=function() {
		if(xmlHttp.readyState==4) {
			if (xmlHttp.responseXML.getElementsByTagName('registration')[0].getAttribute("status")=="ERROR") {
				document.getElementById("message").innerHTML = "There was an error in the registration process. Please try again. If the problem persists, please contact the site administrator";
			} else {
				window.location="/thankyou.php?email="+xmlHttp.responseXML.getElementsByTagName('registration')[0].getAttribute("email");
			}
		}
	}
	xmlHttp.open("POST","/middleware/user/views.py/register",true);
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttp.send(
		'username='+document.getElementById('register').username.value
		+'&pwd='+document.getElementById('register').pwd.value
		+'&first_name='+document.getElementById('register').first_name.value
		+'&family_name='+document.getElementById('register').family_name.value
		+'&gender='+document.getElementById('register').gender.value
		+'&mother_tongue='+document.getElementById('register').mother_tongue.value
		+'&target_language='+document.getElementById('register').target_language.value
		+'&email='+document.getElementById('register').email.value
		+'&school='+document.getElementById('register').school.value
		+'&country='+document.getElementById('register').country.value
	);
}

function checkLanguages()
{
	if(document.getElementById('target_language').value && document.getElementById('mother_tongue').value) {
		if(document.getElementById('mother_tongue').value==document.getElementById('target_language').value) {
			return new Array(false, "Your language and the language you wish to learn cannot be the same.");
		} else {
			return new Array(true);
		}
	} else {
		return new Array(false, "You did not fill in your language and the language you wish to learn.");
		document.getElementById("target_language_check").innerHTML = "";
	}
}

function isValidEmail(strEmail){
	validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
	strEmail = document.forms[0].email.value;

	// search email text for regular exp matches
	if (strEmail.search(validRegExp) == -1) {
		return false;
	} 
	return true; 
}

function hasWhiteSpace(s) 
{

    reWhiteSpace = new RegExp(/\s+/);
	 
    // Check for white space
    if (!reWhiteSpace.test(s)) {
        return false;
    }
return true;
}

function isValidUsername(s) 
{
	reValidUsername = new RegExp(/^([a-zA-Z])[a-zA-Z_-]*[\w_-]*[\S]$|^([a-zA-Z])[0-9_-]*[\S]$|^[a-zA-Z]*[\S]$/);
    if (!reValidUsername.test(s)) {
        return false;
    }
	return true;
}

function validateForm()
{
	var validation_errors="";
	var validate = true;
	
	if(!document.getElementById('register').first_name.value) {
		validation_errors += "<li>You did not fill in your first name.</li>";
		validate = false;
	}
	if(!document.getElementById('register').family_name.value) {
		validation_errors += "<li>You did not fill in your family name.</li>";
		validate = false;
	}
	if(!document.getElementById('register').gender.value) {
		validation_errors += "<li>You did not fill in your gender.</li>";
		validate = false;
	}	
	if (checkLanguages()[0]==false) {
		validation_errors += "<li>" + checkLanguages()[1] + "</li>";
		validate = false;
	}
	if(!document.getElementById('register').email.value) {
		validation_errors += "<li>You did not fill in your e-mail address.</li>";
		validate = false;
	} else {
		if (isValidEmail(document.getElementById('register').email.value)==false) {
			validation_errors += "<li>You did not provide a valid e-mail address.</li>";
			validate = false;
		} else {
			if(document.getElementById('register').email2.value != document.getElementById('register').email.value) {
				validation_errors += "<li>You did not fill in the same e-mail address twice.</li>";
				validate = false;				
			}
		}
	}
	if(!document.getElementById('register').username.value) {
		validation_errors += "<li>You did not provide a username.</li>";
		validate = false;
	} else {
		if (document.getElementById('register').username.value.length<3) {
			validation_errors += "<li>Your username should be at least 3 characters long.</li>";
			validate = false;
		} else {
			if (isValidUsername(document.getElementById('register').username.value)==false) {
				validation_errors += "<li>You did not provide a valid username.</li>";
				validate = false;
			}
		}		
	}
	if(!document.getElementById('register').pwd.value) {
		validation_errors += "<li>You did not choose a password.</li>";
		validate = false;
	} else {
		if (document.getElementById('register').pwd.value.length<3) {
			validation_errors += "<li>Your password should be at least 3 characters long.</li>";
			validate = false;
		} else {
			if (hasWhiteSpace(document.getElementById('register').pwd.value)==true) {
				validation_errors += "<li>Your password should not contain any spaces.</li>";
				validate = false;
			}
		}
	} 
	if(!document.getElementById('register').disclaimer.checked) {
		validation_errors += "<li>You did not agree to the disclaimer.</li>";
		validate = false;
	}
	if(!document.getElementById('register').copyright_privacy.checked) {
		validation_errors += "<li>You did not agree to the copyright and privacy policy.</li>";
		validate = false;
	}	
	if (validate==false) {
		document.getElementById("message").innerHTML = "Please make the following adjustments in your form:<br/><ul>" + validation_errors + "</ul>";
	} else {
		checkUser();
	}
}

function showFormInvalid()
{
  document.getElementById("message").innerHTML = "Please correct the following mistakes in your form:<br/>&nbsp;<br/>";
}

function getCookie(search_name) {
  // note: document.cookie only returns name=value, not the other components
  var tab_cookies = document.cookie.split( ';' );
  for ( i = 0; i < tab_cookies.length; i++ ) {
    // now we'll split apart each name=value pair
    var cookie_tmp = tab_cookies[i].split('=');
    // and trim left/right whitespace while we're at it
    var cookie_name = cookie_tmp[0].replace(/^\s+|\s+$/g, '');
    // if the extracted name matches passed search_name
    if (cookie_name==search_name) {
      // we need to handle case where cookie has no value but exists (no = sign, that is):
      if (cookie_tmp.length>1) {
        return unescape( cookie_tmp[1].replace(/^\s+|\s+$/g, '') );
      }
      // cookie is initialized but no value => result = null
      return null;
    }
  }
  return null;
} 

function fillinMotherTongue() {
	var currentLanguageOption = document.getElementById(getCookie('site_language'));
	currentLanguageOption.selected = true;
}

function changePassword()
{
	var validation_errors="";
	var validate = true;
	if(!document.getElementById('change_password').pwd.value) {
		validation_errors += "You did not choose a password.";
		validate = false;
	} else {
		if (document.getElementById('change_password').pwd.value.length<3) {
			validation_errors += "Your password should be at least 3 characters long.";
			validate = false;
		} else {
			if (hasWhiteSpace(document.getElementById('change_password').pwd.value)==true) {
				validation_errors += "Your password should not contain any spaces.";
				validate = false;
			}
		}
	} 
	if (validate==false) {
		document.getElementById("message").innerHTML = validation_errors;
	} else {
		var xmlHttp;
		xmlHttp = openXMLHttp();
		xmlHttp.onreadystatechange=function() {
			if(xmlHttp.readyState==4) {
				document.getElementById("message").innerHTML = xmlHttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;
			}
		}
		xmlHttp.open("POST","/middleware/user/views.py/change_password",true);
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlHttp.send('username='+document.getElementById('change_password').username.value
					+'&k='+document.getElementById('change_password').k.value
					+'&pwd='+document.getElementById('change_password').pwd.value
		);
	}
}

function login()
{
	var xmlHttp;
	xmlHttp = openXMLHttp();
	xmlHttp.onreadystatechange=function() {
		if(xmlHttp.readyState==4) {
			var response = xmlHttp.responseXML.getElementsByTagName('login')[0].childNodes[0].nodeValue;
			if(response=="OK") {
				document.getElementById("message").innerHTML = "";
				window.location="/beta";
			} else {
				document.getElementById("message").innerHTML = response;
			}
		}
	}
	xmlHttp.open("POST","/middleware/user/views.py/login",true);
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttp.send('username='+document.getElementById('login').username.value
				+'&pwd='+hex_md5(document.getElementById('login').pwd.value)
	);
	return false;
}
