// Create crossbrowser request object
function createRequest() {
	var request = null;

	try {
		request = new XMLHttpRequest();	// For non-microsoft browsers e.g. Safari and Firefox
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP"); // For Internet Explorer
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP"); // For Internet Explorer
			} catch (failed) {
				request = null;
			}
		}
	}
	
	return request;
}

function callbackHandler(httpStatus) {
	var response = null;

	if(httpStatus) {
		if(request.readyState == 4) {
			if(request.status == 200) {
				// Put response from server in variable
				// 'responseText' if response is text, 'responseXML' if response is XML 
				if(httpStatus == 'Text') {
					response = request.responseText;
				} else if(httpStatus == 'XML') {
					response = request.responseXML;
				}
			}
		}
	}

	return response;
}

// Get data
function sendRequest(obj, dataUrl, parameters, id, sendType, status, async, responseFunc) {
	// Set httpStatus
	httpStatus = status;
	// Response function
	responseFunction = responseFunc;

	// Url to get data from
	var url = dataUrl;
	// Send extra parameters
	var params = parameters;
	// Add random number to url
	var rand = new Date().getTime();
	url = url + '?rand=' + rand
	// If we use 'GET' as sendType we need to add the parameters to the url
	if(params && sendType == 'GET') {
		url = url + '&' + params;
	}
	// Set destination
	dest_id = id;
	
	// Connection is initialized
	// 'GET' if not sending data, 'POST' when sending data involving money or placing an order
	// 'true' if asynchronical using page, 'false' when user should not use page (ie. when placing order)
	obj.open(sendType, url, async);
	// Run updatePage function when ready
	obj.onreadystatechange = handleResponse;	
	// If we use 'POST' as sendType we need to send the parameters with the request object
	if(sendType == 'POST') {
		obj.send(params);
		// 'null' (empty value) means you are not sending any data to the server
	} else {
		obj.send(null);
	}
}

// Update element on page or send back response data
function handleResponse() {
	// If all ok put response in variable
	var responseData = callbackHandler(httpStatus);

	if(responseData != null) {
		if(dest_id != null) {
			// Destination element
			var contentEl = getObj(dest_id);
			// Run replaceText function
			replaceText(contentEl, responseData);
		} else {
			switch(responseFunction) {
				case "prepareData":
					prepareData(responseData);
					break;
				case "setVacancyDescription":
					setVacancyDescription(responseData);
					break;
			}
		}
	}
}
