// general javascript functions
// (c) A.R.
var clipboard = '';
var elements_array = new Array();
var forms_disabled = false;

function add_start_zero(number, length)
{
	str = number + '';
	while (str.length < length) str = '0' + str;
	return str;
}

function alert_field(form_name, field_name, alert_message)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			alert(alert_message);
			res.elements[field_name].focus();
		}
	}
}

function block_element(element, blocking_time)
{
	// note: blocking_time = -1 means element has to be blocked forever
	var element_id;
	element.disabled = true;
	if ((blocking_time == '') || (isNaN(blocking_time))) blocking_time = 0;
	if (blocking_time > 0)
	{
		element_id = 'element' + rand(0, 2147483648);
		elements_array[element_id] = element;
		setTimeout("unblock_element('" + element_id + "')", 1000 * blocking_time);
	}
}

function block_form(form_name, blocking_time)
{
	// note: blocking_time = -1 means form has to be blocked forever
	var i, res;
	res = find_object(form_name);
	if (res)
	{
		forms_disabled = true;
		for (i = 0; i < res.elements.length; i++)
		{
			if ((res.elements[i].type == 'submit') || (res.elements[i].type == 'reset') || (res.elements[i].name == 'submit_button') || (res.elements[i].name == 'reset_button')) res.elements[i].disabled = true;
		}
		if ((blocking_time == '') || (isNaN(blocking_time))) blocking_time = 0;
		if (blocking_time > 0) setTimeout("unblock_form('" + form_name + "')", 1000 * blocking_time);
	}
}

function change_images()
{
	var arg, i, res;
	arg = change_images.arguments;
	for (i = 0; i < (arg.length - 1); i += 2)
	{
		res = find_object(arg[i]);
		if (res)
		{
			if (!res.src2) res.src2 = res.src;
			res.src = arg[i + 1];
		}
	}
}

function do_keypress(event, obj, maxlength)
{
	// note: if object not found then return true
	if (event && obj && (maxlength > 0))
	{
		if (event.keyCode == 13) maxlength--; 
		if (obj.value.length >= maxlength)
		{
			if (event.keyCode == 13) return false;
			else if (event.charCode == 0) return true;
			else return false;
		}
		else return true;
	}
	else return true;
}

function do_paste(obj, maxlength)
{
	var str;
	if (obj && window.clipboardData && (maxlength > 0))
	{
		str = window.clipboardData.getData('Text');
		if (str.length > 0)
		{
			if (obj.value.length + str.length > maxlength)
			{
				if (clipboard == '') clipboard = str;
				window.clipboardData.setData('Text', str.substr(0, maxlength - obj.value.length));
				setTimeout("restore_clipboard()", 100);
			}
		}
	}
}

function find_form_field(form_name, field_name)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name]) return res.elements[field_name];
		else return false;
	}
	else return false;
}

function find_object(obj, d)
{
	var i, n, res;
	if (!d) d = document;
	n = obj.indexOf('?');
	if ((n > 0) && parent.frames.length)
	{
		d = parent.frames[obj.substring(n + 1)].document;
		obj = obj.substring(0, n);
	}
	res = d[obj];
	if (!res && d.all) res = d.all[obj];
	for (i = 0; !res && (i < d.forms.length); i++) res = d.forms[i][obj];
	if (!res && d.layers) for (i = 0; !res && (i < d.layers.length); i++) res = find_object(obj, d.layers[i].document);
	if (!res && d.getElementById) res = d.getElementById(obj);
	return res;
}

function focus_field(form_name, field_name)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name]) res.elements[field_name].focus();
	}
}

function get_field(form_name, field_name)
{
	// note: if form and/or field not found then return ''
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name]) return res.elements[field_name].value;
		else return '';
	}
	else return '';
}

function get_radio(form_name, field_name)
{
	// note: if form and/or field not found then return ''
	var i, res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			for (i = 0; i < res.elements[field_name].length; i++)
			{
				if (res.elements[field_name][i].checked) return res.elements[field_name][i].value;
			}
			return '';
		}
		else return '';
	}
	else return '';
}

function insert_at_cursor(field, value)
{
	var end_pos, sel, start_pos;
	if (document.selection)
	{
		field.focus();
		sel = document.selection.createRange();
		sel.text = value;
	}
	else if (field.selectionStart || (field.selectionStart == '0'))
	{
		start_pos = field.selectionStart;
		end_pos = field.selectionEnd;
		field.value = field.value.substring(0, start_pos) + value + field.value.substring(end_pos, field.value.length);
	}
	else field.value += value;
}

function preload_images()
{
	var arg, i, n;
	if (document.images)
	{
		if (!document.image_array) document.image_array = new Array();
		n = document.image_array.length;
		arg = preload_images.arguments;
		for (i = 0; i < arg.length; i++)
		{
			document.image_array[n] = new Image;
			document.image_array[n++].src = arg[i];
		}
	}
}

function rand(min_value, max_value)
{
	return min_value + Math.round(Math.random() * (max_value - min_value));
}

function reset_form(form_name)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (!forms_disabled)
		{
			res.reset();
		}
	}
}

function restore_clipboard()
{
	if (window.clipboardData && (clipboard != ''))
	{
		window.clipboardData.setData('Text', clipboard);
		clipboard = '';
	}
}

function restore_images()
{
	var arg, i, res;
	arg = restore_images.arguments;
	for (i = 0; i < arg.length; i++)
	{
		res = find_object(arg[i]);
		if (res)
		{
			if (res.src2) res.src = res.src2;
		}
	}
}

function select_radio(form_name, field_name, number)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			if (res.elements[field_name][number])
			{
				res.elements[field_name][number].checked = true;
				return true;
			}
			else return false;
		}
		else return false;
	}
	else return false;
}

function set_field(form_name, field_name, value)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			return res.elements[field_name].value = value;
			return true;
		}
		else return false;
	}
	else return false;
}

function submit_form(form_name, blocking_time)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (!forms_disabled)
		{
		 	if (verify_form(form_name))
			{
				if (blocking_time != 0) block_form(form_name, blocking_time);
				res.submit();
			}
		}
	}
}

function submit_form_external(form_name)
{
	var res;
	res = find_object(form_name);
	if (res)
	{
	 	if (verify_form(form_name)) res.submit();
	}
}

function trim(str)
{
	var ch, length;
	length = str.length;
	if (length > 0)
	{
		ch = str.charAt(0);
		while ((ch == ' ') || (ch == "\f") || (ch == "\n") || (ch == "\r") || (ch == "\t"))
		{
			str = str.substring(1);
			length--;
			if (length > 0) ch = str.charAt(0);
			else break;
		}
		if (length > 0)
		{
			ch = str.charAt(length - 1);
			while ((ch == ' ') || (ch == "\f") || (ch == "\n") || (ch == "\r") || (ch == "\t"))
			{
				str = str.substring(0, length - 1);
				length--;
				if (length > 0) ch = str.charAt(length - 1);
				else break;
			}
		}
	}
	return str;
}

function unblock_element(element)
{
	if (elements_array[element]) elements_array[element].disabled = false;
}

function unblock_form(form_name)
{
	var i, res;
	res = find_object(form_name);
	if (res)
	{
		forms_disabled = false;
		for (i = 0; i < res.elements.length; i++)
		{
			if ((res.elements[i].type == 'submit') || (res.elements[i].type == 'reset') || (res.elements[i].name == 'submit_button') || (res.elements[i].name == 'reset_button')) res.elements[i].disabled = false;
		}
	}
}

function verify_date(form_name, field_name)
{
	// note: if form and/or field not found then return true
	var arr, arr0, arr1, arr_count, arr_count0, arr_count1, res, temp, value;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			value = res.elements[field_name].value;
			if (value == '') return false;
			else
			{
				arr = value.split(' ');
				arr_count = arr.length;
				if (arr_count > 2) return false;
				else
				{
					arr[0] = arr[0].replace(/[.\/]/g, '-');
					arr0 = arr[0].split('-');
					arr_count0 = arr0.length;
					if (arr_count0 != 3) return false;
					else if ((arr0[0] == '') || (isNaN(arr0[0])) || (arr0[1] == '') || (isNaN(arr0[1])) || (arr0[2] == '') || (isNaN(arr0[2]))) return false;
					else if ((arr0[0] <= 0) || (arr0[0] != Math.round(arr0[0])) || (arr0[1] <= 0) || (arr0[1] != Math.round(arr0[1])) || (arr0[2] <= 0) || (arr0[2] != Math.round(arr0[2]))) return false;
					else
					{
						if (arr0[2].length == 4)
						{
							temp = arr0[1];
							arr0[1] = arr0[0];
							arr0[0] = arr0[2];
							arr0[2] = temp;
						}
						if (arr0[1] > 12)
						{
							temp = arr0[1];
							arr0[1] = arr0[2];
							arr0[2] = temp;
						}
						if ((arr0[0] < 1901) || (arr0[0] > 9999)) return false;
						else if (arr0[1] > 12) return false;
						else if (arr0[2] > 31) return false;
						else if ((arr0[2] == 31) && ((arr0[1] == 2) || (arr0[1] == 4) || (arr0[1] == 6) || (arr0[1] == 9) || (arr0[1] == 11))) return false;
						else if ((arr0[2] == 30) && (arr0[1] == 2)) return false;
						else if ((arr0[2] == 29) && (arr0[1] == 2) && ((arr0[0] / 4) != Math.round(arr0[0] / 4))) return false;
						else
						{
							if (arr_count == 2)
							{
								arr1 = arr[1].split(':');
								arr_count1 = arr1.length;
								if (arr_count1 > 3) return false;
								else
								{
									if ((arr1[0] == '') || (isNaN(arr1[0]))) return false;
									else if ((arr1[0] < 0) || (arr1[0] != Math.round(arr1[0]))) return false;
									else if (arr1[0] > 23) return false;
									else
									{
										if (arr_count1 > 1)
										{
											if ((arr1[1] == '') || (isNaN(arr1[1]))) return false;
											else if ((arr1[1] < 0) || (arr1[1] != Math.round(arr1[1]))) return false;
											else if (arr1[1] > 59) return false;
										}
										if (arr_count1 > 2)
										{
											if ((arr1[2] == '') || (isNaN(arr1[2]))) return false;
											else if ((arr1[2] < 0) || (arr1[2] != Math.round(arr1[2]))) return false;
											else if (arr1[2] > 59) return false;
										}
									}
								}
							}
							return true;
						}
					}
				}
			}
		}
		else return true;
	}
	else return true;
}

function verify_equal_fields(form_name, field_name1, field_name2)
{
	// note: if form not found then return true, but if one or both fields not found then return false
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name1])
		{
			if (res.elements[field_name2])
			{
				if (res.elements[field_name1].value == res.elements[field_name2].value) return true;
				else return false;
			}
			else return false;
		}
		else return false;
	}
	else return true;
}

function verify_field(form_name, field_name, is_trim)
{
	// note: if form and/or field not found then return true
	var res, value;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			value = res.elements[field_name].value;
			if (is_trim) value = trim(value);
			if (value == '') return false;
			else return true;
		}
		else return true;
	}
	else return true;
}

function verify_ip(value, part)
{
	var arr, i;
	if (part) value = value.replace(/\.$/g, '');
	if (value == '') return false;
	else
	{
		arr = value.split('.');
		if (arr.length > 4) return false;
		else if (!part && (arr.length != 4)) return false;
		else
		{
			for (i = 0; i < arr.length; i++)
			{
				if ((arr[i] == '') || (isNaN(arr[i]))) return false;
				else if ((arr[i] < 0) || (arr[i] > 255) || (arr[i] != Math.round(arr[i])) || ((arr[i].charAt(0) == '0') && (arr[i].length > 1))) return false;
			}
			return true;
		}
	}
}

function verify_ip_field(form_name, field_name, part)
{
	// note: if form and/or field not found then return true
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name]) return verify_ip(res.elements[field_name].value, part);
		else return true;
	}
	else return true;
}

function verify_maxlength(form_name, field_name, length)
{
	// note: if form and/or field not found then return true
	if (length > 0)
	{
		var res, value;
		res = find_object(form_name);
		if (res)
		{
			if (res.elements[field_name])
			{
				if (res.elements[field_name].value.length > length) return false;
				else return true;
			}
			else return true;
		}
		else return true;
	}
	else return true;
}

function verify_minlength(form_name, field_name, length, is_trim)
{
	// note: if form and/or field not found then return true
	var res, value;
	if (length > 0)
	{
		res = find_object(form_name);
		if (res)
		{
			if (res.elements[field_name])
			{
				value = res.elements[field_name].value.replace(/\s{2,}/g, ' ');
				if (is_trim) value = trim(value);
				if (value == '') return true;
				else
				{
					if (value.length < length)
					{
						if (res.elements[field_name].value.length != value.length) res.elements[field_name].value = value;
						return false;
					}
					else return true;
				}
			}
			else return true;
		}
		else return true;
	}
	else return true;
}

function verify_net(form_name, field_name)
{
	// note: if form and/or field not found then return true
	var arr, res, value;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			value = res.elements[field_name].value;
			if (value == '') return false;
			else
			{
				arr = value.split('/');
				if (arr.length == 1) return verify_ip(arr[0], false);
				else if (arr.length == 2)
				{
					if (!verify_ip(arr[0])) return false;
					else
					{
						if (verify_ip(arr[1])) return true;
						else
						{
							if ((arr[1] == '') || (isNaN(arr[1]))) return false;
							else if ((arr[1] < 0) || (arr[1] > 32) || (arr[1] != Math.round(arr[1])) || ((arr[1].charAt(0) == '0') && (arr[1].length > 1))) return false;
							else return true;
						}
					}
				}
				else return false;
			}
		}
		else return true;
	}
	else return true;
}

function verify_number(form_name, field_name)
{
	// note: if form and/or field not found then return true
	var res, value;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			value = res.elements[field_name].value;
			if ((value == '') || (isNaN(value))) return false;
			else if ((value <= 0) || (value != Math.round(value))) return false;
			else return true;
		}
		else return true;
	}
	else return true;
}

function verify_password(form_name, field_name)
{
	// note: if form and/or field not found then return true
	var res;
	res = find_object(form_name);
	if (res)
	{
		if (res.elements[field_name])
		{
			if (res.elements[field_name].value.match(/^[a-z0-9_]{5,}$/i)) return true;
			else return false;
		}
		else return true;
	}
	else return true;
}