
var gDivStatus;
var gLanding;
var gMessage = 'Saving...';
var gDivMessage;
var EmailRegEx = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

var kUNINITIALIZED = 0;
var kLOADING = 1;
var kLOADED = 2;
var kINTERACTIVE = 3;
var kCOMPLETE = 4; 

function getHTTPObject() {
	var http_object;

	// Mozilla and others method
	try {
		
	  if (window.XMLHttpRequest)
	  {
		http_object = new XMLHttpRequest();
	  }
		// code for IE
	  else if (window.ActiveXObject)
	  {
		http_object = new ActiveXObject("Microsoft.XMLHTTP");
	  }
  
	}
	catch (e) 
	{
		http_object = false;
	}
	
	return http_object;
}

var http = getHTTPObject(); // create the HTTP Object

function Submit(postto,form,landing,message)
{
	gDivStatus = document.getElementById('divStatus');
	gDivMessage = document.getElementById('divMessage');
	form = document.getElementById(form);
	
	if(message)
		gMessage = message;
		
	gLanding = landing;
	
	if(postto)
		postto = '/includes/'+postto;
		
	if(form)
	{
		if (Validate(form)) {
			if (postto != null) {
				var postdata = GetFormVars(form);
				
				http.open('POST', postto, true);
				http.onreadystatechange = save_StateChange;
				http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				http.setRequestHeader("Content-length", postdata.length);
				http.setRequestHeader("Connection", "close");
				http.send(postdata);
			}
			else 
				if (gLanding != null) 
					document.location.href = gLanding;
		}
		else {
			//return the user to the top of the form to see errors
			if(document.location.href.indexOf('#') == -1)
				document.location.href += '#'+form.name;
			else
				document.location.href = document.location.href;
			
			return false;
		}
	}
	else if(postto)
	{
		var postdata = postto.substring(postto.indexOf('?')+1);
		postto = postto.substring(0,postto.indexOf('?')+1);
		http.open('POST', postto, true);
		http.onreadystatechange = save_StateChange;
		http.setRequestHeader("Content-type" , "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", postdata.length);
		http.setRequestHeader("Connection", "close");
		http.send(postdata);	
	}
	
}

function checkValidChars(txt,invalidchars) 
{
	if(!invalidchars || invalidchars == '')
		invalidchars = "!@#$%^&*()~,'<>/?;:\| ";
	
	for(i=0; i< invalidchars.length; i++) {
		if(txt.indexOf(invalidchars.charAt(i)) != -1 ) 
			return false;
	}
	return true;
}

function Validate (form) {
    var valid = true;
	var validElement = true;
		
    for(var i=0; i<form.elements.length; i++)
		{
			validElement = true;
			//do not check buttons or hidden elements
			if(form.elements[i].type != "button" && form.elements[i].type != "hidden")
			{
				if(form.elements[i].getAttribute('required') && form.elements[i].getAttribute('required') == 'true')
				{
				  if(form.elements[i].type == 'checkbox' && form.elements[i].checked == false)
					{
						validElement = false;
						if(form.elements[i].getAttribute('errormessage'))
							alert(form.elements[i].getAttribute('errormessage'));
					}
					
					if(validElement == true && form.elements[i].value == '')
					{
						validElement = false;
					}
					
					if(validElement == true && form.elements[i].getAttribute('minlength') && form.elements[i].getAttribute('minlength') != '')
					{
						if(form.elements[i].value.length < parseInt(form.elements[i].getAttribute('minlength')))
						{
							validElement = false;
							var error = document.createElement("div");
							error.setAttribute("id",form.elements[i].name+"_error");
							error.setAttribute("style","color:red;");	
							error.innerHTML = "must be at least "+form.elements[i].getAttribute('minlength')+" characters";
							form.elements[i].parentNode.appendChild(error);							
						}	
						else if(document.getElementById(form.elements[i].name+"_error"))
						{
							var remove = document.getElementById(form.elements[i].name+"_error");
							form.elements[i].parentNode.removeChild(remove);
							form.elements[i].style.borderColor = '';
						}
					}
					
					if(validElement == true && form.elements[i].getAttribute('matchelement'))
					{
						var matchelement = document.getElementById(form.elements[i].getAttribute('matchelement'));
						if(matchelement && form.elements[i].value != matchelement.value)
						{
							validElement = false;
						}
						
					}
					
				}
				
				if(validElement == true && form.elements[i].value != '' && form.elements[i].getAttribute('validate'))
				{
					if(form.elements[i].getAttribute('validate') == 'email')
					{
						if(!EmailRegEx.exec(form.elements[i].value))
							validElement = false;
						else
							form.elements[i].style.borderColor = '';
					}
					else if(form.elements[i].getAttribute('validate') == 'domain')
					{
						if(form.elements[i].value.indexOf('.') == -1 
							|| form.elements[i].value.indexOf(',') != -1)
						{
							validElement = false;
						}
						else
							form.elements[i].style.borderColor = '';
					}
					else if(form.elements[i].getAttribute('validate') == 'number')
					{
						try
						{
							var test = parseInt(form.elements[i].value);
							form.elements[i].style.borderColor = '';
						}
						catch(ex)
						{
							validElement = false;
						}
						if(!test)
						{
							validElement = false;
						}
						else
						{
							//a number passes the above test if there are commas but it should _not_
							// so test against valid characters
							validElement = checkValidChars(form.elements[i].value);
						}
					}
				}
				
				if(validElement == true && form.elements[i].value != '' && form.elements[i].getAttribute('checkvalidchars'))
				{
					validElement = checkValidChars(form.elements[i].value,form.elements[i].getAttribute('checkvalidchars'));
				}
				
					
				if(validElement == false)
				{
					form.elements[i].style.borderColor = "#990000";
					form.elements[i].style.borderStyle = "solid";
					form.elements[i].style.borderWidth = "1px";
					
					valid = false;
				}
				else
				{
					form.elements[i].style.borderColor = '';
					form.elements[i].style.borderStyle = '';
					form.elements[i].style.borderWidth = '';
				}
			}
			
        }
        return valid;
}

function GetFormVars (form) {
        var data="";
        var first="";
		var type="";
		var tagName="";
        for(var i=0; i<form.elements.length; i++)
		{
			type = form.elements[i].type.toLowerCase();
			tagName = form.elements[i].tagName.toLowerCase();
			
			if(type == "radio")
			{
				if(form.elements[i].checked == true)
	                data+=first+encodeURI(form.elements[i].name)+"="+encodeURI(form.elements[i].value);
			}
			else if(type == "checkbox")
			{
				if(data.indexOf('&'+form.elements[i].name+'=') != -1 && form.elements[i].checked == true)
					data=data.replace('&'+form.elements[i].name+'=','&'+form.elements[i].name+'='+encodeURI(form.elements[i].value)+',');
				else if(form.elements[i].checked == true)
	                data+=first+encodeURI(form.elements[i].name)+"="+encodeURI(form.elements[i].value);
			}
			else if(type == "text")
			{
				data+=first+encodeURI(form.elements[i].name)+"="+escape(form.elements[i].value);
			}
			else if(tagName == "textarea")
			{	
				data+=first+encodeURI(form.elements[i].name)+"="+escape(form.elements[i].innerHTML);				
			}
			else if(type != "button")
			{
				data+=first+encodeURI(form.elements[i].name)+"="+encodeURI(form.elements[i].value);
			}
			
            first="&";
        }
        return data;
}

function TrimSpaces(s)
{
  if(s == null)
		return '';
		
	while (s.substring(0,1) == ' ')
		s = s.substring(1, s.length);
	
	while (s.substring(s.length-1, s.length) == ' ')
		s = s.substring(0,s.length-1);
		
	while(s.indexOf('\r\n') != -1)
		s = s.replace('\r\n','');
	
	while(s.indexOf('\r') != -1)
		s = s.replace('\r','');
	
	while(s.indexOf('\n') != -1)
		s = s.replace('\n','');
	
	return s;
}

function save_StateChange()
{
  // did the connection work?
	if (http.readyState == kLOADING) {
		if(gDivStatus)
		{
			gDivStatus.setAttribute('class','yellowmessage');
			gDivStatus.innerHTML = gMessage; 
		}
		else if(gDivMessage)
		{
			gDivMessage.setAttribute('class','yellowmessage');
			gDivMessage.innerHTML = gMessage
		}
	}
	else if (http.readyState == kCOMPLETE) {
		
	// split by the pipe
	results = TrimSpaces(http.responseText).split('|');
		
    if(results.length > 1)
		{
			if (results[0] == 'true')
			{
				gDivMessage.setAttribute('class','greenmessage');
				if(results.length > 3 && results[3] != '')
				{
					if(document.location.href == results[3])
						document.location.reload();
					else
						document.location.href = results[3];						
					
					return;
				}
			 	else if(gLanding != null && gLanding != '')
				{
				  if(gDivMessage)
				  {
					 gDivMessage.style.display = '';
					 gDivMessage.innerHTML = results[1];
					}
				  if(gLanding == 'close')
					 {
					   if(document.getElementById('btnClose'))
					     	document.getElementById('btnClose').click();					     
					   }
					  else	
					  {
						document.location.href = gLanding;
					  }
					return;
				}
				else if(gDivMessage)
				{
					gDivMessage.innerHTML = results[1];
				}
				if(gDivStatus)
					gDivStatus.innerHTML = results[1];				
			}
			else if(gDivMessage)
			{
				gDivMessage.setAttribute('class','redmessage');
				gDivMessage.innerHTML = results[1];
			}
		
		}		
		else
		{
			 if(gDivMessage)
			 {
				gDivMessage.setAttribute('class','redmessage');
				gDivMessage.innerHTML = "State Error 102:<br />"+http.responseText;
			 }
			 else
			 {
				alert('State Error 102:\r\n'+http.responseText);
			 }
		}
	
	   /*
		if(gLanding != null && gLanding != '')
		{
			document.location.href = gLanding;	
			return;
		}
		*/
	
		if(gDivStatus)
			gDivStatus.innerHTML = "Error!";
	}
}