/**
 * AJAX FUNCTIONS
 * preforms all ajax related js functionality
 * 4 Dec, 2006
 * BusinessPartner.com.au | MediaArchitecs.com
 */

/**
 * perform form requests GET / POST
 * return all data and populate 
 * indocated area.
 */
var disable = false;
var lastform = '';

function submitFormCustom(f, field1, field2, dable){ 
	// block off any form submits
	blockoff = true;
	// disable form, or not
	disable = dable;
	lastform = f;
	if (disable === true) {
		disable_form(f, true);
	}
	
	// re-id eval ajax part
	if (document.getElementById('ajxjs')) {	
		document.getElementById('ajxjs').innerHTML = '';
		document.getElementById('ajxjs').id = 'id_'+Math.random();
	}
	
	var xmlReq = new XMLHttpRequest(); 
		
	var formData = prepareFormdata(f);

	xmlReq.onreadystatechange = function(){ 
		if(xmlReq.readyState == 4){ 

			//alert(xmlReq.getAllResponseHeaders());
			if (content = xmlReq.responseText) {
				//document.getElementById(field1).innerHTML = '';
				if (trim_str(content) != "") {
					
					try {
						document.getElementById(field1).innerHTML = content;
					}
					catch (e) {
						alert(document.getElementById(field1).innerHTML);
					}
					// evaluate JSON
					if (document.getElementById('jsonjs')) {
						try {
							var json = eval("(" + document.getElementById('jsonjs').innerHTML + ")");	
						} catch (e) {
							alert('Could not evaluate JSON '+e);
						}
					} // end eval JSON
					// evaluate regular JS
					if (document.getElementById('ajxjs')) {
						try {
							eval(document.getElementById('ajxjs').innerHTML);	
						}
						catch (e) {
							alert('Could not evaluate javascript '+e);
						}
					} // end eval js
					// evaluate regular JS
					if (document.getElementById('notejs')) {
						try {
							eval(document.getElementById('notejs').innerHTML);	
						}
						catch (e) {
							alert('Could not evaluate javascript '+e);
						}
					} // end eval js
					if (disable === true) {
						
						if (!document.getElementById('msgdivarea') && !document.getElementById('cbform')) {
							disable_form(f, false);
						}

						if (resetform === true){
							f.reset();
						}
					}
				}
			}
			document.getElementById(field2).innerHTML = "";
			blockoff = false;
		} else if (xmlReq.readyState == 1) {
			document.getElementById(field2).innerHTML = '<div class="ld">Loading ...</div>';
		} else if (xmlReq.readyState == 3) {
			document.getElementById(field2).innerHTML = '<div class="ld">Please wait ...</div>';
		} else if (xmlReq.readyState == 2) {
			document.getElementById(field2).innerHTML = "";
		}
	}
	
	
	xmlReq.open(f.method, f.action, true);
	xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlReq.setRequestHeader("Content-length", formData.length);
	//xmlReq.setRequestHeader("Connection", "close");
	xmlReq.send(formData); 
	return false; 

} 



function prepareFormdata(f) {
	var fData = '', elem = ''; 
	for(var s=0; s < f.elements.length; s++){ 
		elem = f.elements[s]; 
		if ((elem.type == 'checkbox' || elem.type == 'radio') && elem.checked == false) {
			continue;
		}
		
		var selemval = '';

		if (elem.tagName == 'SELECT' && elem.multiple === true) {
			var selem = elem.getElementsByTagName('option');
			for (i = 0; i < selem.length; i++) {
				selemval = '';
				if (selem[i].value != "" && selem[i].selected === true) {
					if(fData != ''){ 
						fData += '&'; 
					} 
					selemval = selem[i].value; 
					fData += elem.name+"="+selemval.replace(/&/g, 'amp;'); 
				}
			}
		} else {
			if(fData != ''){ 
				fData += '&'; 
			} 
			selemval = elem.value;
			fData += elem.name+"="+selemval.replace(/&/g, 'amp;');
		}
	}
	if (fData != "") {
		fData += "&xrand="+randomString(8);
	}
	return fData;
}

function randomString(len) {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var string_length = len;
	var randomstring ='';
	for (var i=0; i <= string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}

/**
 * perform direct ajax call that return js code child
 */
url = document.location.href;
xend = url.lastIndexOf("/") + 1;
var base_url = url.substring(0, xend);

function ajax_do (url, id, del) {
	// Does URL begin with http?
	if (url.substring(0, 4) != 'http') {
			url = base_url + url;
	}

	//alert(url);

	if (del === true) {
		if (document.getElementById(id)) {
			document.body.removeChild(document.getElementById(id));
		}
	}

	// Create new JS element
	var jsel = document.createElement('SCRIPT');
	jsel.type = 'text/javascript';
	jsel.id = id;
	jsel.src = url;

	// Append JS element (therefore executing the 'AJAX' call)
	document.body.appendChild (jsel);
}

function remove_object(objid){
	if (document.getElementById(objid)) {
		document.getElementById(objid).parentNode.removeChild(document.getElementById(objid));
	}
	return;
}

/**
 * Disable form
 * sets form fields to true = enable; false = disable
 */
function disable_form(f, status) {
	
	// disable input
	try {
		f.getElementsByTagName('input');
	}
	catch (e) {
		return;
	}
	
	inp = f.getElementsByTagName('input');
	if (inp.length > 0) {	
		for (i=0; i < inp.length; i++) {
			inp[i].disabled = status;
		}
	}
	// disable textarea
	inp = f.getElementsByTagName('textarea');
	if (inp.length > 0) {	
		for (i=0; i < inp.length; i++) {
			inp[i].disabled = status;

		}
	}
	// disable select
	inp = f.getElementsByTagName('select');
	if (inp.length > 0) {	
		for (i=0; i < inp.length; i++) {
			if (status) {
				inp[i].style.visibility = 'hidden';
			} else {
				inp[i].style.visibility = 'visible';
			}
		}
	}

	

	return;
}

function resetForm() {
	lastform.reset();
}

/**
 * trim()
 * js function
 * trims leading and trailing whitespace
 */
function trim_str(strText) { 
	// this will get rid of leading spaces 
	while (strText.substring(0,1) == ' ' || strText.substring(0,1) == "\n" || strText.substring(0,1) == "\r") {
		strText = strText.substring(1, strText.length);
	}

	// this will get rid of trailing spaces 
	while (strText.substring(strText.length-1,strText.length) == ' ' || strText.substring(strText.length-1,strText.length) == "\n" || strText.substring(strText.length-1,strText.length) == "\r") {
		strText = strText.substring(0, strText.length-1);
	}

	return strText;
} 
