﻿var blank = "";

/********/

function form () {
	return document.forms [0];
}// form;

/********/

function ajax_object (parent_control) {
	var object;
	try {
		object = new XMLHttpRequest ();
	} catch (except) {
		try {
			object = new ActiveXObject ("Msxml2.XMLHTTP");
		} catch (except) {
			try {
				object = new ActiveXObject ("Microsoft.XMLHTTP");
			} catch (except) {
				return false;
			}// try
		}// try
	}// try
	object.ajax_handler = parent_control;
	return object;
}// ajax_object;

/********/

function ajax_parameters () {
	var items = [];

	/******/
	
	this.add = function (name, value) {
		items.push ({"name":name,"value":value});
	}// add;
	
	/******/
	
	this.indexOf = function (name) {
		for (var i = 0; i < items.length; i++) {
			if (items [i].name.equals (name)) return i;
		}// for;
		return -1;
	}// indexOf;
	
	/******/
	
	this.render = function () {
		var result = blank;
		var test_string = blank;
		for (var i = 0; i < items.length; i++) {
			if (!result.equals (blank)) result += "&";
			result += items [i].name + "=" + escape (items [i].value);
		}// for;
		return result;
	}// render;

	/******/
	
}// ajax_parameters;

/********/

function ajax_handler (callback_parameter) {

	var request_object = ajax_object (this);
	var callback = document.getElementById (callback_parameter);
	var parameters = new ajax_parameters;
	
	this.return_field = blank;
	this.return_message = blank;

	/******/
	
	this.add_parameters = function (name, value) {
		parameters.add (name, value);
	}// add_parameters;
	
	/******/
	
	this.callback_handler = function (data) {
		if (request_object.readyState != 4) return;
		document.body.style.cursor = blank;
		if (request_object.callback) {
			request_object.callback.innerHTML = request_object.responseText;
		} else {
			if (request_object.responseText != blank) {
				alert (request_object.responseText);
				return;
			}// if;
		}// if;
		if (request_object.return_message) alert (request_object.return_message);
		if (request_object.return_field) request_object.return_field.trigger = request_object.responseText;
	}// load_code;
	
	/******/
	
	this.send = function (destination) {
		document.body.style.cursor = "wait";
		if (callback) request_object.callback = callback;
		if (this.return_message) request_object.return_message = this.return_message;
		if (this.return_field) request_object.return_field = this.return_field;
		request_object.onreadystatechange = this.callback_handler;
		request_object.open ("post", destination, true);
		request_object.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		request_object.send (parameters.render ());
	}// this.send;
	
	/******/
	
	this.set_value = function (record, name) {
		if (record.name.toLowerCase () != name) return false;
		switch (name) {
			case "return_field": this.return_field = record.value; break;
			case "return_message": this.return_message = record.value; break;
		}// switch;
		return true;
	}// set_value;
	
	/******/
	
}// ajax_handler;

/********/

function get_ajax_data (destination, parameters, callback) {
	var ajax = new ajax_handler (callback);
	with (ajax) {
		for (var i = 0; i < parameters.length; i++) {
			add_parameters (parameters [i].name, parameters [i].value);
		}// for;
		add_parameters ("callback", callback);
		send (destination);
	}// with
	return false;
}// get_ajax_data;

/********/

function set_ajax_data (destination, parameters) {
	var ajax = new ajax_handler ();
	with (ajax) {
		for (var i = 0; i < parameters.length; i++) {
			if (set_value (parameters [i], "return_field")) continue;
			if (set_value (parameters [i], "return_message")) continue;
			add_parameters (parameters [i].name, parameters [i].value);
		}// for;
		send (destination);
	}// with;
	return false;
}// set_ajax_data;

/********/