/**
 * AJAX Class
 * @author Matti Teräslahti
 */
 function AJAX(responseFunction) {
 	// Declare the methods
 	this.loadHttpRequest = loadHttpRequest;
 	this.makePOSTRequest = makePOSTRequest;
	this.submitForm = submitForm;
 	this.setResponse = setResponse;
 	this.responseFunction = responseFunction;
 	this.displayLoadingMessage = displayLoadingMessage;
 	
	var http_request = false;
	var element_id = false;
	var responseText = false;
	var responseXML = false;
	
	//Load httpRequest
	this.loadHttpRequest();
	
	/**
	 * Loads the HttpRequest object to the class property
	 */
	 function loadHttpRequest() {
		if ( window.XMLHttpRequest ) { // Mozilla
			http_request = new XMLHttpRequest();
			if ( http_request.overrideMimeType ) {
				http_request.overrideMimeType( 'text/xml' );
			}
		} else if ( window.ActiveXObject ) { // IE
			try {
				http_request = new ActiveXObject( "Msxml2.XMLHTTP" );
			} catch ( e ) {
				try {
					http_request = new ActiveXObject( "Microsoft.XMLHTTP" );
				} catch ( e ) {}
			}
		}
	 }
	
	/**
	 * Display the loading message
	 * @param String imgulr - The url of the loading image
	 * @param String message - The message to display
	 * @param String elementId - The element id where the message is shown
	 */
	function displayLoadingMessage(imgurl, message, elementId) {
		var targetElement = document.getElementById(elementId);
		var height = targetElement.offsetHeight;
		var width = targetElement.offsetWidth;
		targetElement.innerHTML =
			"<div class='loading' style='text-align:center;vertical-align:middle;height:"+height+"px;width:"+width+"px;'>"
			+"<img src='"+imgurl+"' alt='' /><p>"+message+"</p></div>";
	}

	// post request to php
	function makePOSTRequest( url, parameters, element_id_param ) {
		element_id = element_id_param;

		if ( !http_request ) {
			alert( 'Cannot create XMLHTTP instance' );
			return false;
		}

		// On ready state
		//http_request.onreadystatechange = setResponse;

		http_request.onreadystatechange = function() {
			if ( http_request.readyState == 4 ) {
				if ( http_request.status == 200 ) {
					responseFunction(http_request);
				}
			}
		}
		
		
		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 );
		return true;
	}


/*
	// sets content to element
	function alertContents() {
		if ( this.http_request.readyState == 4 ) {
			if ( this.http_request.status == 200 ) {
				result = this.http_request.responseText;
				document.getElementById( element_id ).style.visibility = "visible";
				document.getElementById( element_id ).innerHTML = result;        
			}
		}
	}
*/
	
	/**
	 * Sets the responseXML and responseText properties
	 */
	function setResponse() {
		if ( http_request.readyState == 4 ) {
			if ( http_request.status == 200 ) {
				responseXML = http_request.responseXML;
				responseText = http_request.responseText;
			}
		}
	}
	
	// hides element given as parameter
	// if no parameter hides last element handled
	function hideElement( element_id_param ) {
		if( element_id_param == null ) {
			document.getElementById( element_id ).style.visibility = "hidden";
		}
		else {
			document.getElementById( element_id_param ).style.visibility = "hidden";
		}
	}
	
	// Parse the form data and submit it via makePOSTRequest
	function submitForm( form_id, url, params ) {
		var form = document.getElementById( form_id );
		var formData = form.elements;
    	var poststr = "";
		for( i=0; i < formData.length; i++ ) {
			if ( formData[i].tagName == "INPUT" ) {
				if ( formData[i].type == "text" ) {
               		poststr += formData[i].name + "=" + formData[i].value + "&";
            	}
            	if ( formData[i].type == "password" ) {
               		poststr += formData[i].name + "=" + formData[i].value + "&";
            	}
            	if ( formData[i].type == "hidden" ) {
               		poststr += formData[i].name + "=" + formData[i].value + "&";
            	}
				if ( formData[i].type == "checkbox" ) {
               		if ( formData[i].checked ) {
                  		poststr += formData[i].name + "=" + formData[i].value + "&";
               		}
               		/*else {
                 		poststr += formData[i].name + "=&";
               		}*/
            	}
            	if ( formData[i].type == "radio" ) {
               		if ( formData[i].checked ) {
                  		poststr += formData[i].name + "=" + formData[i].value + "&";
               		}
            	}
         	}   
         	if ( formData[i].tagName == "SELECT" ) {
            	var sel = formData[i];
            	poststr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
         	}
         	if ( formData[i].tagName == "TEXTAREA" ) {
            	poststr += formData[i].name + "=" + formData[i].value + "&";
         	}
         
      	}
      	poststr += params;
		makePOSTRequest( url, poststr, '' );
   }
}