// ERROR CODES
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

var http_request = false;
function makeRequest(url, parameters, action){
  http_request = false;
  if(window.XMLHttpRequest){ // Mozilla, Safari,...
	 http_request = new XMLHttpRequest();
	 if(http_request.overrideMimeType){
		// set type accordingly to anticipated content type
		//http_request.overrideMimeType('text/xml');
		http_request.overrideMimeType('text/html');
	 }
  } else if(window.ActiveXObject){ // IE
	 try {
		http_request = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e){
		try {
		   http_request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e){}
	 }
  }
  if(!http_request){
	 alert('Cannot create XMLHTTP instance');
	 return false;
  }
  http_request.onreadystatechange = action;
  if(!url.match(/\.php$/i)){
  	url = url + "index.php";
  }
  http_request.open('POST', url + parameters, true);
  http_request.send(null);
}

function submitStatus(){
	if(http_request.readyState == 4){
		if(http_request.status == 200){
			var status = http_request.responseText;
			status = (status.indexOf("<html>") >= 0) ? "" : status;
			if(status != ""){
				if(document.getElementById('status')){
					document.getElementById('status').innerHTML = status;            
				}else{
					alert(status);
					if(status.indexOf("Error") < 0){
						document.location.href = document.location.href;
					}
				}
			}else{
				alert('[Error]\n1. There was a problem with the submission request.\n'+status);
			}
		}else{
			alert('[Error]\n2. There was a problem with the submission request.\n'+http_request.status);
		}
	}
}

function validateStatus(){
	if(http_request.readyState == 4){
		if(http_request.status == 200){
			var status = http_request.responseText;
			status = (status.indexOf("<html>") >= 0) ? "" : status;
			if(status != ""){
				if(document.getElementById('status')){
					document.getElementById('status').innerHTML = status;            
				}else{
					alert(status);
				}
			}else{
				currentForm.submit();
			}
		}else{
			alert('[Error]\nThere was a problem with the validation request.\nCode: '+http_request.status);
		}
	}
}
function encodeURI(str){
	return(escape(str));
}
function getFormValues(fobj,valFunc){
	var str = "";
	var valueArr = null;
	var val = "";
	var cmd = "";
	var checkboxes = new Array();

	for(var i = 0; i<fobj.elements.length; i++){
		if(fobj.elements[i].tagName == "INPUT"){
			if(fobj.elements[i].type == "text" || fobj.elements[i].type == "hidden"){
				str += fobj.elements[i].name + "=" + encodeURI(fobj.elements[i].value) + "&";
			}	
			if(fobj.elements[i].type == "checkbox"){
				if(fobj.elements[i].checked){
					if(checkboxes[fobj.elements[i].name]){
						checkboxes[fobj.elements[i].name] = checkboxes[fobj.elements[i].name] + ","  + encodeURI(fobj.elements[i].value);
					}else{
						checkboxes[fobj.elements[i].name] = encodeURI(fobj.elements[i].value);
					}
				}
			}
			if(fobj.elements[i].type == "radio"){
				if(fobj.elements[i].checked){
					str += fobj.elements[i].name + "=" + encodeURI(fobj.elements[i].value) + "&";
				}
			}
		}   
		if(fobj.elements[i].tagName == "SELECT"){
			var sel = fobj.elements[i];
			str += sel.name + "=" + encodeURI(sel.options[sel.selectedIndex].value) + "&";
		}
		if(fobj.elements[i].tagName == "TEXTAREA"){
			str += fobj.elements[i].name + "=" + encodeURI(fobj.elements[i].value) + "&";
		}
	}
	for(var key in checkboxes){
		str += key + "=" + checkboxes[key] + "&";
	}
	str = str.substr(0,(str.length - 1));
	return str;
}
   
var currentForm;
function submitForm(formName){
	currentForm = document.getElementById(formName);
	var str = "?listener=submit&" + getFormValues(currentForm);
	var url = document.location.href;
	url = url.split("?");
	url = url[0];
	//alert(url+"/n"+str);
	makeRequest(url, str, submitStatus);
}

function validateForm(formName){
	if(document.getElementById(formName).required && document.getElementById(formName).required.value != ""){
		currentForm = document.getElementById(formName);
		var str = "?listener=validate&" + getFormValues(currentForm);
		var url = document.location.href;
		url = url.split("?");
		url = url[0];
		//document.write(url+"\n"+str);
		makeRequest(url, str, validateStatus);
	}else{
		document.getElementById(formName).submit();
	}
}
