// define object, and check if browswer support object
function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}

// update and display records.
// This function is a generic function for ajax!
/* It requires a few inputs:
 * 1. The first parameter must be a form name.
 * 2. The second parameter must be a page url for the asp part for ajax script.  (This part returns * the result for the ajax.
 * 3(a). If getOption is 1, The ID for the div part where the ajax result will be pasted into.
 * 3(b). If getOption is 2, The ID will be the second selection box name that is controlled by the 
 * selection box in (5) below (the fifth argument/parameter).
 * 4. getOption: (a) if getOption = 1 - Get Text only, (b) if getOption = 2 - Get Selection Box;
 * 5. or above is the variables for the forms elements that you want to pass into the ajax
 * functions.
 */
function SubmitForm() { 
	var xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
  		alert ("Your browser does not support AJAX!");
		return;
  	}
	// initialize the variables:
	var form, strURL, divID
	var Felmt = new Array();
	j = 0;
	
	// first argument/parameter = form
	// second argument/parameter = strURL
	// third argument/parameter = divID
	// fourth argument/parameter = getOption
	// *fifth or above arguments/parameters = form.elements names
	// *these arguments/parameters will be passed into the asp page as important parameters
	for (i = 0; i < arguments.length; i++) {
		if (i == 0) {	
			form = arguments[i];
		}
		else if (i == 1) {
			strURL = arguments[i];
		}
		else if (i==2) {
			divID = arguments[i];
		}
		else if (i==3) {
			getOption = arguments[i];
			// getOption: 
			// 1 = Get Text only;
			// 2 = Get Selection Box;
		}
		else if (i >= 4) {			
			Felmt[j++] = arguments[i];
		}
	}

	// set url to be used.
	var url = strURL
	// check every elements in the form
	for (i = 0; i < form.length; i++) {		
		// only operate when object is NOT submit type object.
		if (form.elements[i].type.toLowerCase() != "submit") {
		
			// Case 1, get strict forward result from asp page (url) using the parameters from 			
			// Felmt array.  Returns the value and write it out in the divID area in the main page 
			// that calls this function!
			if (getOption == 1) {			
				for (j = 0; j < Felmt.length; j++) {
					if (Felmt[j].toLowerCase() == form.elements[i].name.toLowerCase()) {						
						if ((form.elements[i].type.toLowerCase() == "select-one") && (form.elements[i].selectedIndex >= 0)){						
							if (j == 0) {							
								url = url + "?" + Felmt[j] + "=" + form.elements[i].options[form.elements[i].selectedIndex].value;
							}
							else {								
								url = url + "&" + Felmt[j] + "=" + form.elements[i].options[form.elements[i].selectedIndex].value;
							}
						}
						else if (form.elements[i].type.toLowerCase() == "checkbox"){
							if (j == 0) {
								url = url + "?" + Felmt[j] + "=" + form.elements[i].checked;
							}
							else {
								url = url + "&" + Felmt[j] + "=" + form.elements[i].checked;							
							}	
						}
						else if (form.elements[i].type.toLowerCase() == "radio"){
							if (form.elements[i].checked) {
								if (j == 0) {
									url = url + "?" + Felmt[j] + "=" + form.elements[i].value;
								}
								else {
									url = url + "&" + Felmt[j] + "=" + form.elements[i].value;							
								}								
							}
						}
						else {
							if (j == 0) {
								url = url + "?" + Felmt[j] + "=" + form.elements[i].value;
							}
							else {
								url = url + "&" + Felmt[j] + "=" + form.elements[i].value;					
							}
						}
					}
				}
			}
			// option 2, chained selection box.  item in Felmt[0] controls the selection box items 
			// in divID.  This will called a function that construct the selection box options for 
			// the element in divID.
			else if (getOption == 2) {
				if (Felmt[0].toLowerCase() == form.elements[i].name.toLowerCase()) {
					if ((form.elements[i].type.toLowerCase() == "select-one") && (form.elements[i].selectedIndex >= 0)) {
						url = url + "?" + Felmt[0] + "=" + form.elements[i].options[form.elements[i].selectedIndex].value;
					}
					else if (form.elements[i].type.toLowerCase() == "checkbox"){
						url = url + "?" + Felmt[0] + "=" + form.elements[i].checked;
					}
					else {
						url = url + "?" + Felmt[0] + "=" + form.elements[i].value;
					}
					
					break;
				}
			}
		}		
	}
	// called different functions according to the options.  See above explainations
	if (getOption == 1) {		
		xmlHttp.onreadystatechange=function(){stateChanged(divID, xmlHttp)};
	}
	else if (getOption == 2) {
		xmlHttp.onreadystatechange=function(){go(divID, xmlHttp)};
	}
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

// get value for selections box, and create options for that selection box.
function go(ID, xmlHttp) {
	if (xmlHttp.readyState==4) {
		var response = xmlHttp.responseText;
		var list=document.getElementById(ID);

		// get the Selected Item.
		if (list.selectedIndex != -1) {
			var SelectedItem = list.options[list.selectedIndex].text;
		}
		else {
			var SelectedItem = "";
		}
		
		while (list.childNodes[0]) {
			list.removeChild(list.childNodes[0]);
		}

		var types=response.split('|');

		// Assign values to the selection box "Type"
		for (i=1; i<types.length; i++) {
		   var x=document.createElement('option');
		   var y=document.createTextNode(types[i]);
		   x.appendChild(y);
		   list.appendChild(x);   
		   list[i-1].value = types[i];

		}

		// assign "Selected option" to the selection box based on the selected item.
		for (i=0; i<types.length; i++) {
			if (SelectedItem != "") {
				if (types[i] == SelectedItem) {
					list.selectedIndex = i-1;
//				  	alert(SelectedItem + ":" + list.selectedIndex);
				}
		    }		
		}
 	}
}

// return value from asp page.
function stateChanged(ID, xmlHttp) { 
	if (xmlHttp.readyState==4) {		
		document.getElementById(ID).innerHTML= xmlHttp.responseText;
	}
}

// clear the content for the text box.
// parameter must be a input text box.
function contentclear(str) {
	var temp = str;
	temp.value = "";
}

// clear content in a div by passing in a div ID.
function TextClear(divID) {
	document.getElementById(divID).innerHTML = "&nbsp";
}

// Email check
function emailcheck(email) {
	var apos = email.value.indexOf("@");
	var dot = email.value.lastIndexOf(".");
	var result = false;
	
	if (dot - apos > 0) {
		// Valid, return true here...
		result = true;
	}
	else {
		alert("The Email Address is invalid!");
		email.focus();
	}
	return result;
}
