﻿/*
 * Post a form using AJAX
 * url - the page to handle submit.
 * parameters - the parameters to submit
 * funStr - a script to handle the XMLHttpRequest state change, the XMLHttpRequest Object named "http_request".
 */
function makePOSTRequest(url, parameters, funcStr) {
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			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 = function(){eval(funcStr);};
	http_request.open('POST', url, true);
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", parameters.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
}

/*
 * Form a parameters string from a Form object.
 * obj - a html form.
 */
function getParamsStr(obj) {
	var getstr = "";
	
	var objList = obj.getElementsByTagName("input");
	if ( objList ){
		for (i=0; i<objList.length; i++) {
			if ((objList[i].type == "text") || (objList[i].type == "hidden")) {
				getstr += (objList[i].name + "=" + objList[i].value + "&");
			}
		}
	}
	
	var selectList = obj.getElementsByTagName("select");
	if ( selectList ){
		for (i=0; i<selectList.length; i++) {
			getstr += (selectList[i].name + "=" + selectList[i].value + "&");
		}
	}
	if(obj.getElementsByTagName("textarea")) {
		for (i=0; i<obj.getElementsByTagName("textarea").length; i++) {
			getstr += obj.getElementsByTagName("textarea")[i].name + "=" + 
			escape(encodeURI(obj.getElementsByTagName("textarea")[i].value)) + "&";
		}
	}
	return getstr;
}

/*
 * To Submit a form by Ajax
 * from - is a HTML Form Object
 * funcStr - is a javascript to be execute when callback.
 */
function ajaxFormSubmit( formObj, funcStr ){
	if ( (formObj) && (formObj.tagName == 'FORM')){
		var params = getParamsStr( formObj );
		makePOSTRequest( formObj.action, params, funcStr );
	}
	
	return false;
}