var xmlHttp = createXmlHttpRequestObject();

function initall()
{
messages=document.getElementById("messages");
}

function createXmlHttpRequestObject()
{
	var xmlHttp;
	try
	{
	xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
	var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
	"MSXML2.XMLHTTP.5.0",
	"MSXML2.XMLHTTP.4.0",
	"MSXML2.XMLHTTP.3.0",
	"MSXML2.XMLHTTP",
	"Microsoft.XMLHTTP");
	// try every prog id until one works
	
	for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
	{
	try
	{
	xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
	}
	catch (e) {}
	}
	}
	if (!xmlHttp)
	messages.innerHTML=("Error creating the XMLHttpRequest object.");
	else
	return xmlHttp;
}

function handleRequestStateChange()
{
	if (xmlHttp.readyState == 4)
	{
	if (xmlHttp.status == 200)
	{
	try
	{
	if (key=="reload")
	{
		updateMySubCat();
	}
	if (key=="save")
	{
		saveMyForm();	
	}
	if (key=="saveinfo")
	{
		save_my_info();
	}
	}
	catch(e)
	{
	messages.innerHTML=("Error reading the response: " + e.toString());
	}
	}
	else
	{
	messages.innerHTML=("There was a problem retrieving the data:\n" +
	xmlHttp.statusText);
	}
	}
}

function updateMySubCat()
{

	var categories = xmlHttp.responseXML.getElementsByTagName("cat");
	document.getElementById("subcat").options.length=0;
	len=categories.length;
	var catArray= new Array();
	for (var i=0; i<len;i++)
	{
	catArray[i]=categories[i].firstChild;
	text=catArray[i].nodeValue;
	document.getElementById("subcat").options[i]= new Option(text);
	}
	//messages.innerHTML=("Successfully Updated");
	document.getElementById("subcat").disabled=false;
}

function saveMyForm()
{
	var categories = xmlHttp.responseXML.getElementsByTagName("cat");
	len=categories.length;
	var catArray= new Array();
	for (var i=0; i<len;i++)
	{
	catArray[i]=categories[i].firstChild;
	text=catArray[i].nodeValue;
	}
	messages.innerHTML=(text);
	if (messages.innerHTML=="You have Successfully Submitted your website for review.")
	{
		// go to account.php?action=view
		//messages.innerHTML="change now";
		window.location="account.php?action=view";
	}
}

function save_my_info()
{
	var categories = xmlHttp.responseXML.getElementsByTagName("cat");
	len=categories.length;
	var catArray= new Array();
	for (var i=0; i<len;i++)
	{
	catArray[i]=categories[i].firstChild;
	text=catArray[i].nodeValue;
	}
	messages.innerHTML=(text);
	if (text=='You have Successfully Created an Account')
	{
		//messages.innerHTML=("go ahead");
		window.location="submit_your_website.php";
	}
}

function reload()
{
	if (xmlHttp)
	{
	try
	{
	var main_cat = document.getElementById("maincat").value;
	var actiona= "reload";
	var params = "maincat=" + main_cat + "&action=" + actiona;
	xmlHttp.open("POST", "process.php", true);
	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	key="reload";
	xmlHttp.onreadystatechange = handleRequestStateChange;
	xmlHttp.send(params);

	
	
	}
	catch (e)
	{
	//messages.innerHTML=("Can't connect to server:\n" + e.toString());
	}
	}
}


function save_edits()
{
	//var domain_name = document.getElementById("dname").value;
	var web_title = document.getElementById("title").value;
	var web_desc = document.getElementById("webdesc").value;
	var main_cat = document.getElementById("maincat").value;
	var sub_cat = document.getElementById("subcat").value;
	var validate="";
	//validate+="x1";
	//validate+="x2";	
	//validate+= check_domain_format(domain_name);
	validate+= check_title_format(web_title);
	validate+= check_desc_format(web_desc);

	if (validate=="")
	{
		//proceed with update
		messages.innerHTML= ("The info you have entered is the following:"+"<br>"+web_title+"<br>"+web_desc+"<br>"+main_cat+"<br>"+sub_cat);
		var params = "action=save"+"&title="+web_title+"&webdesc="+web_desc+"&maincat="+main_cat+"&subcat="+sub_cat;
		xmlHttp.open("POST", "process.php", true);
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		key="save";
		xmlHttp.onreadystatechange = handleRequestStateChange;
		xmlHttp.send(params);
	}
	else
	{
		//Present Error
		messages.innerHTML= (validate);
	}
	return false;
}

function save_info()
{
	var givenname = document.getElementById("name").value;
	var familyname = document.getElementById("familyname").value;
	var yob = document.getElementById("yob").value;

	var validate="";
	validate+= check_name_format(givenname);
	validate+= check_familyname_format(familyname);
	validate+= check_yob_value(yob);

	if (validate=="")
	{
		//proceed with update
		var params = "action=saveinfo&familyname="+familyname+"&name="+givenname+"&yob="+yob;
		xmlHttp.open("POST", "process.php", true);
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		key="saveinfo";
		xmlHttp.onreadystatechange = handleRequestStateChange;
		xmlHttp.send(params);
	}
	else
	{
		//Present Error
		messages.innerHTML= (validate);
	}
	return false;
}

function create_a_user()
{
	messages.innerHTML= ("Validating your data, please wait");

	var user = document.getElementById("user").value;
	var password1 = document.getElementById("password1").value;
	var password2 = document.getElementById("password2").value;
	var email = document.getElementById("email").value;
	var givenname = document.getElementById("givenname").value;
	var familyname = document.getElementById("familyname").value;
	var yob = document.getElementById("yob").value;
	var gender = document.getElementById("gender").value;
	var country= document.getElementById("country").value;
	var human_proof= document.getElementById("human_proof").value;	
	
	var validate="";
	validate+= check_username_format(user);
	validate+= check_password_format(password1,password2);
	validate+= check_email_format(email);
	validate+= check_name_format(givenname);
	validate+= check_familyname_format(familyname);
	validate+= check_yob_value(yob);
	validate+= check_if_human(human_proof);

	if (validate=="")
	{
		//proceed with update
		var params = "action=createuser"+"&username="+user+"&password1="+password1+"&password2="+password2+"&email="+email+"&givenname="+givenname+"&familyname="+familyname+"&yob="+yob+"&gender="+gender+"&country="+country+"&human_proof="+human_proof;
		xmlHttp.open("POST", "process.php", true);
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		key="saveinfo";//same routine will be used for create_user, there is no need for functions duplication
		xmlHttp.onreadystatechange = handleRequestStateChange;
		xmlHttp.send(params);
	}
	else
	{
		//Present Error
		messages.innerHTML= (validate);
	}

	return false;
}

function submit_my_website()
{
	messages=document.getElementById("messages");
	messages.innerHTML= ("Validating your data, please wait");

	var domain_name = document.getElementById("dname").value;
	var web_title = document.getElementById("title").value;
	var web_desc = document.getElementById("webdesc").value;
	var hcountry = document.getElementById("hcountry").value;
	var tcountry = document.getElementById("tcountry").value;
	var main_cat = document.getElementById("maincat").value;
	var sub_cat = document.getElementById("subcat").value;
	
	if (document.add_my_website.ena_sug[0].checked)
	{
		enabled_suggestion=document.add_my_website.ena_sug[0].value;
	}
	if (document.add_my_website.ena_sug[1].checked)
	{
		enabled_suggestion=document.add_my_website.ena_sug[1].value;
	}

	var suggestion= document.getElementById("suggest").value;
	
	var validate="";
 	validate+= check_domain_format(domain_name);
 	validate+= check_title_format(web_title);
 	validate+= check_desc_format(web_desc);
 	
 	if (enabled_suggestion=='Yes' )
 	{
	 	validate+= check_suggestion(suggestion);
 	}

	if (validate=="")
	{

		var params = "action=add_website"+"&dname="+domain_name+"&title="+web_title+"&webdesc="+web_desc+"&hcountry="+hcountry+"&tcountry="+tcountry+"&maincat="+main_cat+"&subcat="+sub_cat+"&ena_sug="+enabled_suggestion+"&suggest="+suggestion;
		xmlHttp.open("POST", "process.php", true);
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		key="save";
		xmlHttp.onreadystatechange = handleRequestStateChange;
		xmlHttp.send(params);
	}
	else
	{
		//Present Error
		messages.innerHTML= (validate);
	}
	return false;
}

function check_name_format(givenname)
{
	if ((givenname.length>1)&&(givenname.length<21))
	{
		return "";	
	}
	else
	{
		return"Given name should be between 2 and 20 characters<br>";
	}
}

function check_familyname_format(familyname)
{
	if ((familyname.length>1)&&(familyname.length<21))
	{
		return "";	
	}
	else
	{
		return"Family name should be between 2 and 20 characters<br>";
	}
}

function check_yob_value(yob)
{
	if ((yob>1900)&&(yob<2000))
	{
		return "";	
	}
	else
	{
		return"Year of Birth is Invalid<br>";
	}	
}

function check_domain_format(dname)
{
	if ((dname.indexOf(":")==4 || dname.indexOf(":")==5) && ((dname.split(".").length - 1)<4)&& ((dname.split(" ").length - 1)==0)&& ((dname.split("/").length - 1)==2))
	{
		return "";	
	}
	else
	{
		return"The domain address format you have entered is invalid. Kindly use the following format: http://www.example.com<br>";
	}
}

function check_email_format(email)
{
	if ((email.indexOf(".") > 2) && (email.indexOf("@") > 0 && email.length > (email.indexOf(".")+2)))
	{
		return "";	
	}
	else
	{
		return"The email address format you have entered is invalid. Kindly use the following format: myemail@mydomain.com<br>";
	}
}

function check_title_format(webtitle)
{
	if ((webtitle.length>2)&&(webtitle.length<51))
	{
		return "";	
	}
	else
	{
		return"The title of your website should be between 3 and 50 characters<br>";
	}
}

function check_desc_format(desc)
{
	if ((desc.length>49)&&(desc.length<401))
	{
		return "";	
	}
	else
	{
		return"The description of your website should be between 50 and 400 characters<br>";
	}
}


function check_password_format(password1,password2)
{
	if ((password1.length>4)&&(password1.length<21)&&(password1.split(" ").length - 1)==0)
	{
		if (password1==password2)
		{
		return "";	
		}
		else
		{
			return"Your confirmation password does not match the chosen password<br>";
		}
	}
	else
	{
		return"Your password should not contain any spaces and should be 5 to 20 characters long.<br>";
	}
	
}



function check_username_format(user)
{
	if ((user.length>4)&&(user.length<21)&&(user.split(" ").length - 1)==0)
	{
		return "";	
	}
	else
	{
		return"Your username should not contain any spaces and should be 5 to 20 characters long.<br>";
	}
}

function check_suggestion(suggestion)
{
	if ((suggestion.length>3)&&(suggestion.length<41)&&(suggestion.split(" ").length<suggestion.length))
	{
		return "";	
	}
	else
	{
		return"Your suggestion for a new a sub-category should be between 4 to 40 characters long.<br>";
	}
}

function check_if_human(human_proof)
{
	if (  (human_proof.length==8)&&((human_proof.split(" ").length-1)==0)  )
	{
		return "";	
	}
	else
	{
		return"The validation code entered does not match that displayed in the image<br>";
	}
}

function enable(element_id)
{
	control=document.getElementById(element_id);
	control.disabled=false;
}	

function disable(element_id)
{
	control=document.getElementById(element_id);
	control.disabled=true;
	control.value='';
}	