// *******************************************************************
// **
// **	    sendAJAXRequest - sends a xmlhttp object to the given url with the given parameters
// **       url_str = the recipient file
// **		parameters_str = the parameters to send as get formatted string 
// **       method_str = GET or POST
// **		responder_str = the name of the funtion to receive the result 
// ** 
// **       returns ture and calls getAJAXResponse(); on successfull sending and returns false on error
// **
// *******************************************************************

function sendAJAXRequest(url_str,parameters_str,method_str,responder_str){

	var xmlhttp = false;
	
	// IE7+, Firefox, Chrome, Opera, Safari
	if(window.XMLHttpRequest){
		xmlhttp = new XMLHttpRequest();
		if(xmlhttp.overrideMimeType){
			// set type accordingly to anticipated content type
			//http_request.overrideMimeType('text/xml');
			xmlhttp.overrideMimeType('text/html');
		}
		
	// IE6, IE5
	}else if(window.ActiveXObject){ 
		try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){}
		}
	}

	//  if no object exists	
	if(!xmlhttp){
		alert('sendAJAXRequest(); Cannot create XMLHTTP instance');
		return false;
	
	//  if the object exists
	}else{
		
		// set listener function
		xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
				eval(responder_str+'(xmlhttp.responseText)');
			}
		}
	
		// if method not set
		if(method_str == undefined){
			method_str = 'GET';
		}
		
		// GET set the send parameters 
		if(method_str == 'GET'){
			xmlhttp.open('GET',url_str+'?'+parameters_str,true);
			xmlhttp.send();
			return true;
		}
			
		// POST set the send parameters 
		if(method_str == 'POST'){
			xmlhttp.open('POST',url_str,true);
			xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlhttp.setRequestHeader("Content-length", parameters_str.length);
			xmlhttp.setRequestHeader("Connection", "close");
			xmlhttp.send(parameters_str);
			return true;
		}
	}
	
	// on error
	return false;
}

// *******************************************************************
// **
// **	    getFormElements - collects all relevant form elements in one array
// ** 		returns the array with the nodelist
// **
// *******************************************************************

function getFormElements(form_obj){
	
	// check for 
	var types = new Array('input','textarea');
	var elements = new Array();
	
	// get all requested nodes
	for(var i=0 ; i<types.length ; i++){
		var nodeList = form_obj.getElementsByTagName(types[i]);
		for(var o=0 ; o<nodeList.length ; o++){
			elements.push(nodeList[o]);
		}
	}

	// return an array of Nodes
	return elements;
}

// *******************************************************************
// **
// **	    elementsToRequestString - creates a GET formatted string from the givven elements
// ** 		returns the GET formatted string
// **
// *******************************************************************

function elementsToRequestString(elements_arr){
	
	// build the request string
	var requestString = '';
	for(var i=0 ; i<elements_arr.length ; i++){
		
		// radio & checkbox elements
		if(
			elements_arr[i].type == 'radio' || 
			elements_arr[i].type == 'checkbox'
		){
			if(elements_arr[i].checked){
				requestString += '&'+elements_arr[i].name+'='+encodeURI(elements_arr[i].value);
			}

		// other elements
		}else{
			requestString += '&'+elements_arr[i].name+'='+encodeURI(elements_arr[i].value);
		}
	}

	// return the request string
	return requestString;
}

